

# 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 を呼び出します。 リクエストの条件もルーティングルール `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` と一致します。  | 