路径匹配规则
API 网关支持 绝对匹配、参数匹配和 前缀匹配 三种路径匹配规则。
绝对匹配
绝对匹配,表示只有请求的路径和配置的路径完全一样时才能匹配成功。
示例
例如,当前 API 的匹配规则为 GET /path
。
请求示例:
请求一:
curl http://127.0.0.1/path
请求二:
curl http://127.0.0.1/other
根据 GET /path
的匹配规则,以上请求中,仅请求一能匹配到当前 API。
参数匹配
当无法确定请求的具体路径,仅明确知道一定存在一个值时,可以在路径中配置一个参数。
示例
例如,当前 API 的匹配规则为 GET /path/{id}
。
请求示例:
请求一:
curl http://127.0.0.1/path
请求二:
curl http://127.0.0.1/path/1
请求三:
curl http://127.0.0.1/path/2
请求四:
curl http://127.0.0.1/path/1/2
根据 GET /path/{id}
的匹配规则,以上请求中,仅请求二、三能匹配到当前 API。
如果需要参数匹配中的参数透传到服务后端,那么在网关控制台配置 API 时,后端服务的请求路径必须为空(下图红框处),若填写了后端服务请求路径,后端服务会以绝对匹配的方式去请求此路径。
例如:后端请求路径填写了 /user/{name}
,发起请求后,{name}
占位符不会生效,后端仅能请求到 path=/user/{name}
的接口。
前缀匹配
如果希望带有某个前缀的请求全部匹配到某一个 API,则可以使用前缀匹配。
示例
例如,当前 API 的匹配规则为 GET /path/*
。
请求示例:
请求一:
curl http://127.0.0.1/path/1
请求二:
curl http://127.0.0.1/path/2
请求三:
curl http://127.0.0.1/path/1/2
根据 GET /path/*
的匹配规则,以上所有请求都可以匹配到该 API。
如果设置前缀匹配的路径为 /path
,则只能请求到路径为 /path/xxx
的接口,无法请求到路径为 /path
的接口。
冲突解决
API 网关支持三种匹配方式。不可避免的,多个 API 之间会出现冲突。比如 /hello
和 /{id}
这两个 API 当遇到路径为 /hello
的请求时,就会冲突。
针对这种冲突情况,API 网关会遵循 最长路径优先规则。当路径长度相同时,继而遵循 绝对匹配 > 参数匹配 > 前缀匹配的规则。
示例
本文提供以下几个 API。
以下配置,优先级由低到高,*为前缀匹配
GET /*
GET /{id}
GET /path
GET /{id}/*
GET /{id}/{name}
GET /{id}/temp
GET /path/*
GET /path/{id}
GET /path/temp
GET /{id}/{name}/{path}
配置路径匹配规则
在 API 网关控制台创建 API 时,您可以配置 路径匹配规则,支持 绝对匹配或 前缀匹配。两种匹配方式都可以在路径中添加参数。