

# API Gateway がルーティングルールを評価する方法の例
<a name="rest-api-routing-rules-examples"></a>

次のセクションでは、API Gateway がルーティングルールと API マッピングを評価する方法の 4 つの例を示します。

## 例 1: ルーティングルールのみ
<a name="rest-api-routing-rules-examples-rule-only"></a>

この例では、カスタムドメイン名 `https://petstore.example.com` のルーティングモードは `ROUTING_RULE_ONLY` に設定され、次のルーティングルールと優先順位があります。


|  ルール ID  |  Priority  |  条件  |  アクション  | 
| --- | --- | --- | --- | 
| `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 を呼び出します。<br />リクエストの条件もルーティングルール `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  |  条件  |  アクション  | 
| --- | --- | --- | --- | 
| `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/ja_jp/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"` | `Beta` API の `Refunds` ステージ。 | リクエストはルーティングルール `000zzz` と一致します。`Cookie` ヘッダーには、この条件の正しい `*contains*` 一致と基本パス一致が含まれています。 | 
| `https://petstore.diagram.example.com/refunds` | `Prod` API の `Refunds` ステージ。 | リクエストには、ルーティングルール `zzz000` と一致するために必要なヘッダーがありません。API Gateway がルーティングルールに正常に一致できない場合、API マッピングにフォールバックします。API Gateway は、ベースパスを `Refunds` API の `Prod` ステージにマッピングできます。 | 
| `https://petstore.diagram.example.com/` | `Prod` API の `Search` ステージ。 | リクエストは API マッピングを空のパス `(none)` に一致させます。 | 

## 例 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  |  条件  |  アクション  | 
| --- | --- | --- | --- | 
| `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  |  条件  |  アクション  | 
| --- | --- | --- | --- | 
| `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` と一致します。 | 