9个稳定版本
1.6.1 | 2024年4月17日 |
---|---|
1.6.0 | 2024年1月24日 |
1.4.1 | 2023年12月27日 |
1.3.1 | 2023年11月2日 |
1.0.5 | 2023年4月23日 |
#232 in Rust模式
每月 65次下载
87KB
2K SLoC
名称
Kong的ATC Router库。
目录
语义
在库的核心中,ATC Router是一个支持在谓词之间进行简单谓词和逻辑组合的领域特定语言。
在DSL中引用的每个数据都有一个类型,类型可以是以下之一
"String"
- UTF-8字符串值IpCidr
- CIDR格式的IP地址范围IpAddr
- 可以与IpCidr
进行比较的单个IP地址Int
- 64位有符号整数
有关该语言在实际中的使用方法,请参阅Kong网站上的文档。
APIs
resty.router.schema
new
语法: s = schema.new()
上下文: 任何
创建一个新的schema实例,该实例稍后可以由router
和context
使用。
add_field
语法: res, err = s:add_field(field, field_type)
上下文: 任何
将名为field
的字段添加到schema中。类型可以是上述语义部分中提到的类型之一。
如果发生错误,将返回nil
和描述错误的字符串。
get_field_type
语法: typ, err = s:get_field_type(field)
上下文: 任何
从schema中获取字段类型。
如果发生错误,将返回nil
和描述错误的字符串。
resty.router.router
new
语法: r = router.new(schema)
上下文: 任何
创建一个新的router实例,该实例可以用于稍后执行匹配。必须引用现有的schema实例。
add_matcher
语法: res, err = r:add_matcher(priority, uuid, atc)
上下文: 任何
向路由器添加匹配器。 priority
是一个 64 位无符号整数,指定了匹配器应评估的优先级。 uuid
是匹配器的 UUID 的字符串表示形式,稍后将用于匹配结果。 atc
是使用 ATC DSL 语法编写的匹配器。
如果发生错误或匹配器存在语法/语义错误,将返回 nil
和描述错误的字符串。
remove_matcher
语法: res, err = r:remove_matcher(uuid)
上下文: 任何
从路由器中删除具有 uuid
的匹配器。
如果匹配器已成功删除,则返回 true
。如果匹配器不存在,则返回 false
。
execute
语法: res, err = r:execute(context)
上下文: 任何
在 context
实例提供的值上执行路由器。
context
必须使用与路由器相同的模式,否则会抛出 Lua 错误。
如果至少有一个匹配器生成了有效的匹配,则返回 true
。如果没有匹配器匹配,则返回 false
。
get_fields
语法: res = r:get_fields()
上下文: 任何
返回路由器内部所有匹配器当前使用的字段名称作为 Lua 数组。这有助于减少产生用户提供的匹配器实际上未使用的不必要值。
validate
语法: fields, err = router.validate(schema, expr)
上下文: 任何
验证表达式是否符合给定的模式。
当表达式有效时,返回提供表达式时使用的字段。如果表达式无效,将返回 nil
和描述原因的字符串。
resty.router.context
new
语法: c = context.new(schema)
上下文: 任何
创建一个新的上下文实例,稍后可用于存储用于路由器匹配的上下文信息。 schema
必须引用现有的模式实例。
add_value
语法: res, err = c:add_value(field, value)
上下文: 任何
在上下文中为 field
提供值。
如果字段存在且值已成功提供,则返回 true
。
如果发生错误,将返回nil
和描述错误的字符串。
get_result
语法: uuid, matched_value, captures = c:get_result(matched_field)
上下文: 任何
在路由器成功匹配后,从上下文中获取匹配结果。
如果提供了 matched_field
,则返回与指定字段匹配的 matched_value
。如果 matched_field
为 nil
或字段未匹配,则对于 matched_value
返回 nil
。
如果上下文不包含有效的匹配结果,则返回 nil
。
否则,返回字符串 UUID、匹配字段 matched_field
的值和匹配路由的正则表达式捕获。
reset
语法: c:reset()
上下文: 任何
这会将上下文 c
重置,而不释放底层内存,因此上下文可以像刚刚创建一样再次使用。
版权和许可
版权所有 © 2022-2023 Kong, Inc.
根据 Apache License, Version 2.0 许可。
项目中的文件只能根据这些条款进行复制、修改或分发。
依赖关系
~4.5–6.5MB
~122K SLoC