#api-gateway #router #dsl #ip-address #matching #cidr #rule

atc-router

用于Kong API网关的灵活的基于DSL的规则匹配引擎

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

Download history 1/week @ 2024-05-15 6/week @ 2024-05-22 7/week @ 2024-07-24 58/week @ 2024-07-31

每月 65次下载

Apache-2.0

87KB
2K SLoC

Rust 1.5K SLoC // 0.0% comments Lua 361 SLoC // 0.0% comments Bazel 86 SLoC // 0.1% comments Pest 34 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实例,该实例稍后可以由routercontext使用。

返回目录

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_fieldnil 或字段未匹配,则对于 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