在 API Gateway 中為 HTTP API 建立路由 - Amazon API Gateway

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

在 API Gateway 中為 HTTP API 建立路由

將直接傳入的 API 請求路由到後端資源。路由由兩部分組成:HTTP 方法和資源路徑,例如 GET /pets。您可以為您的路由定義特定的 HTTP 方法。或者,您可以使用 ANY 方法來比對您尚未為資源定義的所有方法。您可以建立一個 $default 路由,充當不與任何其他路由搭配的請求的全部捕獲。

注意

API Gateway 會先解碼 URL 編碼的請求參數,然後再將其傳遞至後端整合。

使用路徑變數

您可以在 HTTP API 路由中使用路徑變數。

例如,GET /pets/{petID} 路由會擷取用戶端提交給 https://api-id.execute-api.us-east-2.amazonaws.com/pets/6GET 請求。

Greedy 路徑變數會擷取路由的所有子資源。若要建立 Greedy 路徑變數,請將 + 新增至變數名稱,例如 {proxy+}。Greedy 路徑變數必須位於資源路徑結尾。

使用查詢字串參數

根據預設,API Gateway 會將查詢字串參數傳送至您的後端整合 (如果它們包含在對 HTTP API 的請求中)。

例如,當用戶端傳送要求給 https://api-id.execute-api.us-east-2.amazonaws.com/pets?id=4&type=dog 時,查詢字串參數 ?id=4&type=dog 會傳送至您的整合。

使用 $default 路由

$default 路由會擷取未明確與 API 中其他路由相符的請求。

$default 路由收到請求時,API Gateway 會將完整的請求路徑傳送到整合。例如,您可以建立僅使用 $default 路由的 API,並將其與 https://petstore-demo-endpoint.execute-api.com HTTP 端點整合在 ANY 方法上。當您將請求傳送給 https://api-id.execute-api.us-east-2.amazonaws.com/store/checkout 時,API Gateway 會將請求傳送給 https://petstore-demo-endpoint.execute-api.com/store/checkout

若要進一步了解 HTTP 整合,請參閱為 HTTP API 建立 HTTP 代理伺服器整合

路由傳送 API 請求

當用戶端傳送 API 請求時,API Gateway 會先決定要將請求路由傳送到哪個階段。如果請求明確符合階段,API Gateway 會將請求傳送至該階段。如果沒有任何階段完全符合請求,API Gateway 會將請求傳送到 $default 階段。如果沒有$default階段,則 API 會傳回{"message":"Not Found"}且不會產生 CloudWatch 記錄檔。

選擇階段後,API Gateway 就會選擇路由。API Gateway 會使用下列優先順序來選取具有最特定相符項目的路由:

  1. 完全相符的路由和方法。

  2. 使用貪婪路徑變量 ({proxy+}) 配對路由和方法。

  3. $default 路由。

如果沒有路由與請求相符,API Gateway 會將 {"message":"Not Found"} 傳回用戶端。

例如,假設具有 $default 階段的 API,以及下列範例路由:

  1. GET /pets/dog/1

  2. GET /pets/dog/{id}

  3. GET /pets/{proxy+}

  4. ANY /{proxy+}

  5. $default

    下表摘要說明 API Gateway 路由傳送請求到範例路由的方式。

要求 選取的路由 說明

GET https://api-id.execute-api.region.amazonaws.com/pets/dog/1

GET /pets/dog/1

請求完全匹配此靜態路由。

GET https://api-id.execute-api.region.amazonaws.com/pets/dog/2

GET /pets/dog/{id}

請求完全與此路由相符。

GET https://api-id.execute-api.region.amazonaws.com/pets/cat/1

GET /pets/{proxy+}

請求不完全與路由相符。具備 GET 方法和貪婪路徑變量的路由會擷取這個請求。

POST https://api-id.execute-api.region.amazonaws.com/test/5

ANY /{proxy+}

ANY 方法與您尚未為路由定義的所有方法相符。貪婪路徑變量的路由具有比 $default 路由更高的優先順序。