So you mean ``` [ "!AND", -- optional ["arg_name","==","yaml"], [ "!OR", ["arg_name","==","json"], ["arg_weight",">",10] ] ] ``` for the `not` logical operator?
YuanSheng Wang <membp...@apache.org> 于2020年11月25日周三 下午4:03写道: > I think we can mainly use `array`, I write a new style. > > this style can be compatible with the old rules. > > [ > "AND", -- optional > ["arg_name","==","yaml"], > [ > "OR", > ["arg_name","==","json"], > ["arg_weight",">",10] > ] > ] > > > > On Wed, Nov 25, 2020 at 2:58 PM Zexuan Luo <spacewan...@apache.org> wrote: > > > Currently we support a DSL to match routes with variables: > > > > ``` > > [ > > ["arg_name","==","json"], > > ["arg_weight",">",10], > > ["arg_weight","!",">",15] > > ] > > ``` > > > > is evaluated to `ngx.var.arg_name == "json" and ngx.var.arg_weight > 10 > > and not ngx.var.arg_weight > 15`. > > > > It would be better if the DSL can support `or` relation and nested > > expressions. > > > > What about a syntax like: > > ``` > > { > > "or": [ <- the `or` can be other logical operators, like `and`, > > `!or`, `!and` > > ["arg_name","==","json"], > > ["arg_weight",">",10], > > ["arg_weight","!",">",15] > > ] > > } > > ``` > > (means `ngx.var.arg_name == "json" or ngx.var.arg_weight > 10 or not > > ngx.var.arg_weight > 15` ) > > and > > ``` > > { > > "!and": { > > "and": [ > > ["arg_name","==","yaml"] > > ], > > "or": [ > > ["arg_name","==","json"], > > ["arg_weight",">",10], > > ["arg_weight","!",">",15] > > ] > > } > > } > > ``` > > (means `not (ngx.var.arg_name == "yaml" and (ngx.var.arg_name == "json" > or > > ngx.var.arg_weight > 10 or not ngx.var.arg_weight > 15))` ) > > > > > -- > > *MembPhis* > My GitHub: https://github.com/membphis > Apache APISIX: https://github.com/apache/apisix >