I got this idea from Stack Overfollow[1]

[1]
https://stackoverflow.com/questions/20737045/representing-logic-as-data-in-json


On Wed, Nov 25, 2020 at 4:02 PM YuanSheng Wang <membp...@apache.org> wrote:

> 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
>


-- 

*MembPhis*
My GitHub: https://github.com/membphis
Apache APISIX: https://github.com/apache/apisix

Reply via email to