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
>

Reply via email to