

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

# API Gateway 如何評估路由規則的範例
<a name="rest-api-routing-rules-examples"></a>

下節說明 API Gateway 評估路由規則和 API 映射的四個範例。

## 範例 1：僅限路由規則
<a name="rest-api-routing-rules-examples-rule-only"></a>

在此範例中，自訂網域名稱 `https://petstore.example.com` 的路由模式設定為 `ROUTING_RULE_ONLY`，且具有下列路由規則和優先順序。


|  規則 ID  |  Priority  |  條件  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   如果請求包含標頭：`Hello:World`  |   目標 API 1   | 
|  `zzz000`  |   50   |   如果請求包含標頭：`Accept:image/webp` 和 `Pet:Dog-*`，且如果基本路徑包含 `PetStoreShopper`  |   目標 API 2   | 
|  `efg456`  |   100   |  無  |   目標 API 3   | 

下表顯示 API Gateway 如何將上述路由規則套用至範例請求。


| 要求 | 選取的 API | 說明 | 
| --- | --- | --- | 
|  `https://petstore.example.com -h "Hello:World"`  |  目標 API 1  |  請求符合路由規則 `abc123`。  | 
|  `https://petstore.example.com/PetStoreShopper -h "Hello:World", "Pet:Dog-Bella", "Accept:image/webp"`  |  目標 API 1  |  API Gateway 會依優先順序評估所有路由規則。路由規則 `abc123` 具有第一優先順序且條件相符，因此 API Gateway 會調用目標 API 1。 雖然請求的條件也符合路由規則 `zzz000`，但 API Gateway 找到相符項目後，就不會評估任何其他路由規則。  | 
|  `https://petstore.example.com/PetStoreShopper -h "Pet:Dog-Bella", "Accept:image/webp"`  |  目標 API 2  |  請求符合路由規則 `zzz000`。這是相符項目，因為 `Pet:Dog-Bella` 是 `Pet:Dog-*` 的字串相符項目  | 
|  `https://petstore.example.com/PetStoreShopper -h "Pet:Dog-Bella"`  |  目標 API 3  |  請求不符合路由規則 `abc123`。請求不符合路由規則 `zzz000`，因為所有必要的標頭都不存在。下一個優先順序規則符合所有傳入的請求，因此 API Gateway 會調用目標 API 3。  | 

## 範例 2：路由規則和 API 映射
<a name="rest-api-routing-rules-examples-rule-and-mappings"></a>

在此範例中，自訂網域名稱 `https://petstore.diagram.example.com` 的路由模式設定為 `ROUTING_RULE_THEN_API_MAPPING`，且具有下列路由規則和 API 映射。


|  規則 ID  |  Priority  |  條件  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   1   |   如果請求包含 `pets`   |   調用 `PetStore` API 的 `Prod` 階段。  | 
|  `000zzz`  |   5   |   如果請求包含標頭：`Cookie`:`*ux=beta*`，且如果基本路徑包含 `/refunds`  |   調用 `Refunds` API 的 `Beta` 階段。  | 

下表顯示 `https://petstore.backup.example.com` 的 API 映射。


|  API 映射  |  選取的 API  | 
| --- | --- | 
|   `/refunds`   |   調用 `Refunds` API 的 `Prod` 階段。  | 
|   `(none)`   |   調用 `Search` API 的 `Prod` 階段。  | 

下圖顯示 API Gateway 如何將上述路由規則和 API 映射套用至範例請求。此圖後面的表中摘要整理了範例請求。

![\[API Gateway 如何套用上述路由規則和 API 映射的圖。\]](http://docs.aws.amazon.com/zh_tw/apigateway/latest/developerguide/images/rr-diagram.png)


下表顯示 API Gateway 如何將上述路由規則和 API 映射套用至範例請求。


| 要求 | 選取的 API | 說明 | 
| --- | --- | --- | 
|  `https://petstore.diagram.com/pets`  |  `PetStore` API 的 `Prod` 階段。  |  請求符合路由規則 `abc123`。  | 
|  `https://petstore.diagram.example.com/refunds -h "Cookie:lang=en-us;ux=beta"`  |  `Refunds` API 的 `Beta` 階段。  |  請求符合路由規則 `000zzz`。`Cookie` 標頭包含此條件的正確 `*contains*` 相符項目和基本路徑相符項目。  | 
|  `https://petstore.diagram.example.com/refunds`  |  `Refunds` API 的 `Prod` 階段。  |  請求沒有比對路由規則 `zzz000` 所需的標頭。如果 API Gateway 無法成功比對路由規則，則會回復為 API 映射。API Gateway 可以將基本路徑對應至 `Refunds` API 的 `Prod` 階段。  | 
|  `https://petstore.diagram.example.com/`  |  `Search` API 的 `Prod` 階段。  |  請求符合空白路徑 `(none)` 的 API 映射。  | 

## 範例 3：具有多層的路由規則和 API 映射
<a name="rest-api-routing-rules-examples-rule-and-mappings-with-multiple-levels"></a>

在此範例中，自訂網域名稱 `https://petstore.backup.example.com` 的路由模式設定為 `ROUTING_RULE_THEN_API_MAPPING`，且具有下列路由規則和 API 映射。

下表顯示 `https://petstore.backup.example.com` 的路由規則。


|  規則 ID  |  Priority  |  條件  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   如果請求包含標頭：`Hello:World`  |   目標 API 1   | 
|  `000zzz`  |   50   |   如果請求包含標頭：`Accept`:`image/webp` 和 `Pet:Dog-*`，且如果基本路徑包含 `PetStoreShopper`  |  目標 API 2  | 

下表顯示 `https://petstore.backup.example.com` 的 API 映射。


|  API 映射  |  選取的 API  | 
| --- | --- | 
|   `PetStoreShopper`   |   目標 API 3   | 
|   `PetStoreShopper/cats`   |   目標 API 4   | 

下表顯示 API Gateway 如何將上述路由規則和 API 映射套用至範例請求。


| 要求 | 選取的 API | 說明 | 
| --- | --- | --- | 
|  `https://petstore.example.com/PetStoreShopper -h "Accept:image/webp", "Pet:Cats" `  |  目標 API 3  |  請求沒有比對路由規則 `zzz000` 所需的標頭。如果 API Gateway 無法成功比對路由規則，則會回復為 API 映射。API Gateway 可以將基本路徑對應至目標 API 3。  | 
|  `https://petstore.example.com/PetStoreShopper/cats -h "Hello:World"`  |  目標 API 1  |  請求符合路由規則 `abc123`。如果路由模式設定為 `ROUTING_RULE_THEN_API_MAPPING`，則路由規則一律優先於 API 映射。  | 
|  `https://petstore.example.com/Admin -h "Pet:Dog-Bella"`  |  無  |  請求不符合任何路由規則或 API 映射。由於沒有預設的路由規則，因此 API Gateway 會拒絕呼叫並傳送 `403 Forbidden` 狀態碼給發起人。  | 

## 範例 4：萬用字元網域名稱的路由規則
<a name="rest-api-routing-rules-examples-rule-for-wildcard-domains"></a>

在此範例中，自訂網域名稱 `https://*.example.com` 是萬用字元網域名稱。萬用字元支援所有路由回相同網域的子網域。下列範例路由規則會變更此行為，以允許子網域使用 `Host` 標頭路由傳送至不同的目標 API。

下表顯示 `https://*.example.com` 的路由規則。


|  規則 ID  |  Priority  |  條件  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   如果請求包含標頭：`Host:a.example.com`  |   目標 API 1   | 
|  `000zzz`  |   50   |   如果請求包含標頭：`Host:b.example.com`  |  目標 API 2  | 
|  `efg456`  |   500   |  無  |  目標 API 3  | 

下表顯示 API Gateway 如何將上述路由規則套用至範例請求。


| 要求 | 選取的 API | 說明 | 
| --- | --- | --- | 
|  `https://a.example.com`  |  目標 API 1  |  `Host` 標頭為 `a.example.com`。此請求符合路由規則 `abc123`。  | 
|  `https://b.example.com`  |  目標 API 2  |  `Host` 標頭為 `b.example.com`。此請求符合路由規則 `000zzz`。  | 
|  `https://testing.example.com`  |  目標 API 3  |  這會符合全部擷取路由規則 `efg456`。  | 