So you mean
```
[
"!AND", -- optional
["arg_name","==","yaml"],
[
"!OR",
["arg_name","==","json"],
["arg_weight",">",10]
]
]
```
for the `not` logical operator?
YuanSheng Wang <[email protected]> 于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 <[email protected]> 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
>