API 网关在处理收到的请求时,会按照事先配置的路由规则的优先级逐一进行匹配。匹配过程是从自定义优先级规则到高优先级规则到低优先级规则进行遍历。
路由匹配优先级
存在多条路由规则时,按照 自定义优先级 > 路径(Path)> 请求头(Header)> 请求参数(Query)> 创建时间 的优先级从高到低依次进行排序,详细规则如下:
根据 自定义优先级 进行判断:支持 0-100 数字定义,数字越小优先级越高,默认为 100。
根据 路径(Path)匹配规则 进行判断:
- 匹配规则 不同时:精确匹配 > 前缀匹配 > 正则匹配。
- 匹配规则 相同时:路径(Path) 字符串越长优先级越高。
根据 请求头(Header) 的键值对总数进行判断:总数越大则优先级越高。
根据 请求参数(Query) 的键值对进行判断:总数越大则优先级越高。
根据 创建时间 进行判断:创建时间越早则优先级越高。
背景说明
API 网关提供了两种优先级配置方式,创建时间于 2024 年 6 月 14 日前的网关默认使用 v1 版本匹配逻辑,2024 年 6 月 14 日后的网关默认使用 v2 版本匹配逻辑,两种版本的优先级匹配逻辑如下:
版本 | 优先级逻辑 | 优点 | 缺点 |
---|
v1 | 按照路由的创建时间来判断优先级。创建时间越早,优先级越高。 | 逻辑简单,容易上手。 | 路由精确度低。 |
v2 | 按照路由的精确度来判断优先级。精确度越高,优先级越高。 | 路由精确度高。 | 逻辑复杂,有一定的理解成本。 |
注意事项
- v1 版本切换到 v2 版本,需要 提交工单 升级网关。
- v1 版本和 v2 版本都可以开启自定义优先级功能。
- 上下线和自定义优先级是开白功能,如需使用,请 提交工单。
场景说明
当一个请求可以匹配多个规则时,需要定义这些规则的优先级,防止请求只按照最高精准度进行匹配。
请求场景 | 路由配置 | 匹配规则 |
---|
场景1
/abcd | route1 Path:前缀匹配 /abcd 创建时间:2024-06-13 00:00:00
route2: Path:精准匹配 /abcd 创建时间:2024-06-13 00:00:02
route3: route4:
| v1:
route1 > route2
v2:
route2 > route1 |
场景2
/abcd
Heade:x-forword-for =xxx | v1:
route1 > route2 > route3 > route4
v2:
route4 > route3 > route2 > route1 |
仅用作路由生效优先级的说明,实际有且仅有一条路由生效。优先级说明:
- 场景 1 配置 v1 版本匹配规则:优先匹配 route1。因为 route1 创建时间早于 route2。
- 场景 1 配置 v2 版本匹配规则:优先匹配 route2。因为精准匹配精准度高于前缀匹配, route2 精准度高于 route1。其中,route3、route4的匹配条件中需要携带有效 header 信息,因此未命中匹配。
- 场景 2 配置 v1 版本匹配规则:route1 > route2 > route3 > route4。按照创建时间从早到晚排序。
- 场景 2 配置 v1 版本匹配规则:route4 > route3 > route2 > route1。按照精准度从高到低排序。