本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 API 階段連線至 REST APIs路由規則
路由規則是一組條件,當相符時, 會叫用 動作。例如,規則可以將任何傳入請求路由到包含 標頭的自訂網域名稱,Hello:World
並包含 REST API users
production
階段的基本路徑。
規則會依優先順序進行評估,如果您將路由模式設定為 ROUTING_RULE_THEN_API_MAPPING
,則 API Gateway 一律會在評估任何 API 映射之前評估所有路由規則。下列清單說明路由規則如何使用條件、動作和優先順序。
- 條件
-
滿足規則的條件時,即會執行它的動作。API Gateway 最多支援兩個標頭條件和一個路徑條件。API Gateway 會一起評估標頭條件和基本路徑條件。
您可以建立規則,而沒有任何條件。當 API Gateway 評估此規則時,一律會執行 動作。您可以建立規則,而沒有任何條件做為全部截獲規則。
- 動作
-
動作是符合路由規則條件的結果。目前,唯一支援的動作是叫用 REST API 的階段。
每個規則可以有一個動作。
- 優先順序
-
優先順序決定規則的評估順序,從最低值到最高值。規則不能具有相同的優先順序。
您可以將優先順序設定為 1-1,000,000。如果規則的優先順序為 1,API Gateway 會先評估它。我們建議您在建立規則時,在優先順序中新增差距。這可協助您切換規則的優先順序,並新增規則。如需詳細資訊,請參閱變更路由規則的優先順序。
如需 API Gateway 如何評估路由規則的範例,請參閱 API Gateway 如何評估路由規則的範例。
API Gateway 路由規則條件類型
下一節說明路由規則條件類型。API Gateway 只有在所有條件都為 true 時,才會符合規則。
比對標頭條件
建立標頭條件時,您可以比對標頭名稱和標頭 glob 值,例如 Hello:World
。API Gateway 使用常值比對來驗證比對標頭條件。您的條件最多可以使用兩個標頭AND
。例如,如果傳入的請求包含 Hello:World
和 ,您的條件可以相符x-version:beta
。
標頭名稱比對不區分大小寫,但標頭 glob 值區分大小寫。 Hello:World
會比對 hello:World
,但不會比對 Hello:world
。
如需限制標頭值的清單,請參閱 限制。
搭配標頭條件使用萬用字元
您只能在標頭 glob 值中使用萬用字元,且萬用字元必須是 *prefix-match
、 suffix-match*
或 *contains*
。下表顯示如何使用萬用字元進行標頭條件比對的範例。
標頭條件 | 符合路由規則的請求 | 不符合路由規則的請求 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
無 |
如果您為多個標頭值建立條件,例如 Accept:application/json,text/xml
,建議您*contains*
針對標頭條件使用 ,並避免使用逗號 (,
) 字元建立條件。
由於 API Gateway 實際上符合標頭條件,因此語意比對的路由方式可能不同。下表顯示路由規則結果的差異。
標頭條件 | 符合路由規則的請求 | 不符合路由規則的請求 |
---|---|---|
|
|
|
|
|
無 |
比對基本路徑條件
當您建立基本路徑條件時,如果傳入的請求包含您指定的路徑,則規則會相符。比對區分大小寫,因此路徑New/Users
與 不相符new/users
。
您只能為一個基本路徑建立基本路徑條件。
如需受限基本路徑條件的清單,請參閱限制。
使用基本路徑條件來分割基本路徑
建立浴室路徑條件時,您可以選擇分割基本路徑。當您分割基本路徑時,API Gateway 會在叫用目標 API 時移除傳入的相符基本路徑。這與您使用 API 映射時的行為相同。當您不分割基本路徑時,API Gateway 會將整個基本路徑轉送至目標 API。我們建議您在重新建立 API 映射時,只分割基本路徑。
下表顯示 API Gateway 如何評估長條圖基本路徑條件的範例。
條件 | 條紋基本路徑 | 傳入請求 | 結果 |
---|---|---|---|
如果基本路徑包含 |
True |
|
API Gateway 會呼叫 |
如果基本路徑包含 |
False |
|
API Gateway 會呼叫 |
如果基本路徑包含 |
True |
|
API Gateway 會呼叫 |
如果基本路徑包含 |
False |
|
API Gateway 會呼叫 |
如果基本路徑包含 |
True |
|
API Gateway 會使用查詢字串參數 呼叫 |
如果基本路徑包含 |
False |
|
API Gateway 會使用查詢字串參數 呼叫 |
限制
-
目標 API 和自訂網域名稱必須位於相同的 AWS 帳戶中。
每個規則都可以有一個目標 API。
-
您只能為私有自訂網域名稱建立路由規則至私有 API,並為公有自訂網域名稱建立路由規則至公有 API。您無法混合公有和私有資源。
-
如果您的自訂網域名稱同時具有與 REST 和 HTTP APIs API 映射,則不支援路由規則。
優先順序數字上限為 1,000,000。
-
標頭限制:
每個
anyOf
條件只能包含一個標頭值。-
RFC 7230
指定了標頭名稱和標頭 glob 值的唯一允許字元,即 a-z
、0-9
、A-Z
和下列特殊字元:*?-!#$%&'.^_`|~
。 -
您可以在標頭 glob 值中使用萬用字元,但萬用字元必須是
*prefix-match
、suffix-match*
或*contains*
。您不能*
在標頭 glob 值的中間使用 。 不支援萬用字元標頭名稱。
標頭名稱必須少於 40 個字元。
標頭 glob 值必須小於 128 個字元。
Infix 比對的標頭 glob 值必須少於 40 個字元。
條件不支援下列標頭:
access-control-*
apigw-*
Authorization
Connection
Content-Encoding
Content-Length
Content-Location
Forwarded
Keep-Alive
Origin
Proxy-Authenticate
Proxy-Authorization
TE
Trailers
Transfer-Encoding
Upgrade
x-amz-*
x-amzn-*
X-Forwarded-For
X-Forwarded-Host
X-Forwarded-Proto
Via
-
基本路徑限制:
基本路徑長度必須小於 128 個字元。
-
基本路徑只能包含字母、數字和下列字元:
$-_.+!*'()/
。 基本路徑不能以反斜線 (
/
) 字元開始或結束。