lua-resty-expr
opm 包用于 => 一个微型 DSL 用于评估 APISIX 内部使用的表达式。
$ opm get xiangnanscu/lua-resty-expr
lua-resty-expr
名称
一个微型 DSL 用于评估 APISIX 内部使用的表达式。
[!许可证](https://github.com/api7/lua-resty-expr/blob/main/LICENSE)
该项目一直致力于微服务 API 网关 Apache APISIX。
该项目由 深圳市智柳科技有限公司 开源。
除了这个开源版本,我们公司还提供更强大、更高性能的商业版本,并提供技术支持。如果您对我们的商业版本感兴趣,请 联系我们。
概述
location / {
content_by_lua_block {
local expr = require("resty.expr.v1")
local ex = expr.new({
{"arg_name", "==", "json"},
{"arg_weight", ">", 10},
{"arg_weight", "!", ">", 15},
})
-- equal to
-- 'ngx.say(ngx.var.arg_name == "json" and ngx.var.arg_weight > 10 and not ngx.var.arg_weight > 15)'
ngx.say(ex:eval(ngx.var))
}
}
location / {
content_by_lua_block {
local expr = require("resty.expr.v1")
local ex = expr.new({
"!AND",
{"arg_name", "==", "json"},
{
"OR",
{"arg_weight", ">", 10},
{"arg_height", "!", ">", 15},
}
})
-- equal to
-- 'ngx.say(not (ngx.var.arg_name == "json" and
-- (ngx.var.arg_weight > 10 or
-- not ngx.var.arg_height > 15))'
ngx.say(ex:eval(ngx.var))
}
}
方法
new
语法: ex, err = expr.new(rule)
创建一个表达式对象,可以在以后进行评估。
规则的语法是一个节点的数组表。
第一个节点可以是表达式或逻辑运算符。其余节点可以是表达式或另一个包含其逻辑运算符和表达式的节点数组。
每个表达式都是一个包含三个或四个元素的数组表。
{
{"var name (aka. left value)", "optional '!' operator", "operator", "const value (aka. right value)"},
...
}
逻辑运算符可以是以下之一
OR
AND
!OR: not (expr1 or expr2 or ...)
!AND: not (expr1 and expr2 and ...)
它们的组合可以像
[
"AND",
["arg_name", "==", "json"],
[
"!OR",
["arg_weight", ">", 10],
["arg_height", "!", ">", 15]
]
]
运算符列表
|运算符|描述|示例| |--------|-----------|-------| |== |等于 |{"arg_name", "==", "json"}| |~= |不等于 |{"arg_name", "~=", "json"}| |> |大于|{"arg_age", ">", 24}| |< |小于 |{"arg_age", "<", 24}| |~~ |正则匹配|{"arg_name", "~~", "[a-z]+"}| |~ |不区分大小写的正则匹配|{"arg_name", "~", "[a-z]+"}| |in |在数组中查找|{"arg_name", "in", {"1","2"}}| |has |左值数组中是否包含右值|{"graphql_root_fields", "has", "repo"}| |! |反转结果|{"arg_name", "!", "~~", "[a-z]+"}|
eval
语法: ok, err = ex:eval(ctx)
根据ctx
评估表达式。如果ctx
缺失,则默认使用ngx.var
。
local ok = rx:eval()
if ok == nil then
log_err("failed to eval expression: ", err)
return false
end
return ok
安装
编译并安装
make install
开发环境
安装依赖项
make deps
作者
Nan Xiang(@xiangnanscu)
许可证
apache2
版本
-
xiangnanscu/lua-resty-expr 1.3.1.1opm 包用于 => 一个微型 DSL 用于评估 APISIX 内部使用的表达式。 2022-01-11 16:11:06
-
xiangnanscu/lua-resty-expr 1.3.0.1opm 包用于 => 一个微型 DSL 用于评估 APISIX 内部使用的表达式。 2021-06-15 06:04:41
-
opm 包用于 => 一个微型 DSL 用于评估 APISIX 内部使用的表达式。 2021-06-15 06:00:29