

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

# 在 API Gateway 中建立 HTTP API 的路由
<a name="http-api-develop-routes"></a>

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

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

## 使用路徑變數
<a name="http-api-routes-path-variables"></a>

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

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

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

## 使用查詢字串參數
<a name="http-api-routes-query-string-parameters"></a>

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

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

## 使用 `$default` 路由
<a name="http-api-develop-routes.default"></a>

`$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 代理整合](http-api-develop-integrations-http.md)。

## 路由傳送 API 請求
<a name="http-api-develop-routes.evaluation"></a>

當用戶端傳送 API 請求時，API Gateway 會先決定要將請求路由傳送到哪個[階段](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-stages.html)。如果請求明確符合階段，API Gateway 會將請求傳送至該階段。如果沒有任何階段完全符合請求，API Gateway 會將請求傳送到 `$default` 階段。如果沒有 `$default` 階段，則 API 會傳回 `{"message":"Not Found"}` 且不會產生 CloudWatch 日誌。

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

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

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

1. `$default` 路由。

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

例如，假設具有 `$default` 階段的 API，以及下列範例路由：

1. `GET /pets/dog/1`

1. `GET /pets/dog/{id}`

1. `GET /pets/{proxy+}`

1. `ANY /{proxy+}`

1. `$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` 路由更高的優先順序。  | 