將 API 階段連線至 REST APIs路由規則 - Amazon API Gateway

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將 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-matchsuffix-match**contains*。下表顯示如何使用萬用字元進行標頭條件比對的範例。

標頭條件 符合路由規則的請求 不符合路由規則的請求

x-version: a*

  • x-version: account

  • x-version: alpha

  • x-version: backup

  • x-version: beta

  • x-version: users

x-version: *a

  • x-version: alpha

  • x-version: beta

  • x-version: account

  • x-version: backup

  • x-version: users

x-version: *a*

  • x-version: account

  • x-version: alpha

  • x-version: backup

  • x-version: beta

  • x-version: users

x-version: *a*x-version: *b*

  • x-version: backup

  • x-version: beta

  • x-version: account

  • x-version: alpha

  • x-version: users

x-version: b*x-version: *a

  • x-version: beta

  • x-version: account

  • x-version: alpha

  • x-version: backup

  • x-version: users

x-version: *

  • x-version: account

  • x-version: alpha

  • x-version: backup

  • x-version: beta

  • x-version: users

如果您為多個標頭值建立條件,例如 Accept:application/json,text/xml,建議您*contains*針對標頭條件使用 ,並避免使用逗號 (,) 字元建立條件。

由於 API Gateway 實際上符合標頭條件,因此語意比對的路由方式可能不同。下表顯示路由規則結果的差異。

標頭條件 符合路由規則的請求 不符合路由規則的請求

Accept: *json

  • Accept:application/json Accept:text/xml

  • Accept:application/json,text/xml

Accept: *json*

  • Accept:application/json Accept:text/xml

  • Accept:application/json,text/xml

比對基本路徑條件

當您建立基本路徑條件時,如果傳入的請求包含您指定的路徑,則規則會相符。比對區分大小寫,因此路徑New/Users與 不相符new/users

您只能為一個基本路徑建立基本路徑條件。

如需受限基本路徑條件的清單,請參閱限制

使用基本路徑條件來分割基本路徑

建立浴室路徑條件時,您可以選擇分割基本路徑。當您分割基本路徑時,API Gateway 會在叫用目標 API 時移除傳入的相符基本路徑。這與您使用 API 映射時的行為相同。當您不分割基本路徑時,API Gateway 會將整個基本路徑轉送至目標 API。我們建議您在重新建立 API 映射時,只分割基本路徑。

下表顯示 API Gateway 如何評估長條圖基本路徑條件的範例。

條件 條紋基本路徑 傳入請求 結果

如果基本路徑包含 PetStoreShopper/dogs

True

GET https://example.com/PetStoreShopper/dogs

API Gateway 會呼叫 / 資源的 GET方法。

如果基本路徑包含 PetStoreShopper/dogs

False

GET https://example.com/PetStoreShopper/dogs

API Gateway 會呼叫 PetStoreShopper/dogs 資源的 GET方法。

如果基本路徑包含 PetStoreShopper

True

GET https://example.com/PetStoreShopper/dogs

API Gateway 會呼叫 dogs 資源的 GET方法。

如果基本路徑包含 PetStoreShopper

False

GET https://example.com/PetStoreShopper/dogs

API Gateway 會呼叫 PetStoreShopper/dogs 資源的 GET方法。

如果基本路徑包含 PetStoreShopper

True

GET https://example.com/PetStoreShopper?birds=available

API Gateway 會使用查詢字串參數 呼叫 / 資源的 GET方法birds=available

如果基本路徑包含 PetStoreShopper

False

GET https://example.com/PetStoreShopper?birds=available

API Gateway 會使用查詢字串參數 呼叫 /PetStoreShopper 資源的 GET方法birds=available

限制

  • 目標 API 和自訂網域名稱必須位於相同的 AWS 帳戶中。

  • 每個規則都可以有一個目標 API。

  • 您只能為私有自訂網域名稱建立路由規則至私有 API,並為公有自訂網域名稱建立路由規則至公有 API。您無法混合公有和私有資源。

  • 如果您的自訂網域名稱同時具有與 REST 和 HTTP APIs API 映射,則不支援路由規則。

  • 優先順序數字上限為 1,000,000。

  • 標頭限制:

    • 每個anyOf條件只能包含一個標頭值。

    • RFC 7230 指定了標頭名稱和標頭 glob 值的唯一允許字元,即 a-z0-9A-Z和下列特殊字元:*?-!#$%&'.^_`|~

    • 您可以在標頭 glob 值中使用萬用字元,但萬用字元必須是 *prefix-matchsuffix-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 個字元。

    • 基本路徑只能包含字母、數字和下列字元:$-_.+!*'()/

    • 基本路徑不能以反斜線 (/) 字元開始或結束。