路径匹配规则

更新时间:

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 时,您可以配置 路径匹配规则,支持 绝对匹配或 前缀匹配。两种匹配方式都可以在路径中添加参数。