路徑匹配規(guī)則
API 網(wǎng)關(guān)支持 絕對匹配、參數(shù)匹配和 前綴匹配 三種路徑匹配規(guī)則。
絕對匹配
絕對匹配,表示只有請求的路徑和配置的路徑完全一樣時才能匹配成功。
示例
例如,當(dāng)前 API 的匹配規(guī)則為 GET /path
。
請求示例:
請求一:
curl http://127.0.0.1/path
請求二:
curl http://127.0.0.1/other
根據(jù) GET /path
的匹配規(guī)則,以上請求中,僅請求一能匹配到當(dāng)前 API。
參數(shù)匹配
當(dāng)無法確定請求的具體路徑,僅明確知道一定存在一個值時,可以在路徑中配置一個參數(shù)。
示例
例如,當(dāng)前 API 的匹配規(guī)則為 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
根據(jù) GET /path/{id}
的匹配規(guī)則,以上請求中,僅請求二、三能匹配到當(dāng)前 API。
如果需要參數(shù)匹配中的參數(shù)透傳到服務(wù)后端,那么在網(wǎng)關(guān)控制臺配置 API 時,后端服務(wù)的請求路徑必須為空(下圖紅框處),若填寫了后端服務(wù)請求路徑,后端服務(wù)會以絕對匹配的方式去請求此路徑。
例如:后端請求路徑填寫了 /user/{name}
,發(fā)起請求后,{name}
占位符不會生效,后端僅能請求到 path=/user/{name}
的接口。
前綴匹配
如果希望帶有某個前綴的請求全部匹配到某一個 API,則可以使用前綴匹配。
示例
例如,當(dāng)前 API 的匹配規(guī)則為 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
根據(jù) GET /path/*
的匹配規(guī)則,以上所有請求都可以匹配到該 API。
如果設(shè)置前綴匹配的路徑為 /path
,則只能請求到路徑為 /path/xxx
的接口,無法請求到路徑為 /path
的接口。
沖突解決
API 網(wǎng)關(guān)支持三種匹配方式。不可避免的,多個 API 之間會出現(xiàn)沖突。比如 /hello
和 /{id}
這兩個 API 當(dāng)遇到路徑為 /hello
的請求時,就會沖突。
針對這種沖突情況,API 網(wǎng)關(guān)會遵循 最長路徑優(yōu)先規(guī)則。當(dāng)路徑長度相同時,繼而遵循 絕對匹配 > 參數(shù)匹配 > 前綴匹配的規(guī)則。
示例
本文提供以下幾個 API。
以下配置,優(yōu)先級由低到高,*為前綴匹配
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}
配置路徑匹配規(guī)則
在 API 網(wǎng)關(guān)控制臺創(chuàng)建 API 時,您可以配置 路徑匹配規(guī)則,支持 絕對匹配或 前綴匹配。兩種匹配方式都可以在路徑中添加參數(shù)。