

# Exemplos de como o API Gateway avalia regras de roteamento
<a name="rest-api-routing-rules-examples"></a>

A seção a seguir mostra quatro exemplos de como o API Gateway avalia regras de roteamento e mapeamentos de API.

## Exemplo 1: somente regras de roteamento
<a name="rest-api-routing-rules-examples-rule-only"></a>

Neste exemplo, o nome de domínio personalizado `https://petstore.example.com` tem o modo de roteamento definido como `ROUTING_RULE_ONLY` e as regras e prioridades de roteamento a seguir.


|  ID da regra  |  Prioridade  |  Condições  |  Ação  | 
| --- | --- | --- | --- | 
| `abc123` |  10  |  Se a solicitação contiver cabeçalho: `Hello:World`  |  API de destino 1  | 
| `zzz000` |  50  |  Se a solicitação contiver cabeçalhos `Accept:image/webp` e `Pet:Dog-*` e se o caminho base contiver `PetStoreShopper` |  API de destino 2  | 
| `efg456` |  100  | Nenhum |  API de destino 3  | 

A tabela a seguir mostra como o API Gateway aplica as regras de roteamento anteriores a solicitações de exemplo.


| Solicitação | API selecionada | Explicação | 
| --- | --- | --- | 
| `https://petstore.example.com -h "Hello:World"` | API de destino 1 | As solicitações correspondem à regra de roteamento `abc123`. | 
| `https://petstore.example.com/PetStoreShopper -h "Hello:World", "Pet:Dog-Bella", "Accept:image/webp"` | API de destino 1 | O API Gateway avalia todas as regras de roteamento em ordem de prioridade. A regra de roteamento `abc123` é a primeira em prioridade e as condições correspondem, então o API Gateway invoca a API de destino 1.<br />Embora as condições da solicitação também correspondam à regra de roteamento `zzz000`, o API Gateway não avalia nenhuma outra regra de roteamento depois que encontra uma correspondência. | 
| `https://petstore.example.com/PetStoreShopper -h "Pet:Dog-Bella", "Accept:image/webp"` | API de destino 2 | As solicitações correspondem à regra de roteamento `zzz000`. Houve correspondência porque `Pet:Dog-Bella` era uma string compatível com `Pet:Dog-*`. | 
| `https://petstore.example.com/PetStoreShopper -h "Pet:Dog-Bella"` | API de destino 3 | A solicitação não corresponde à regra de roteamento `abc123`. A solicitação não corresponde à regra de roteamento `zzz000` porque todos os cabeçalhos necessários não estão presentes. A próxima regra prioritária corresponde a todas as solicitações recebidas, então o API Gateway invoca a API de destino 3. | 

## Exemplo 2: regras de roteamento e mapeamentos de API
<a name="rest-api-routing-rules-examples-rule-and-mappings"></a>

Neste exemplo, o nome de domínio personalizado `https://petstore.diagram.example.com` tem o modo de roteamento definido como `ROUTING_RULE_THEN_API_MAPPING` e as regras de roteamento e mapeamentos de API a seguir.


|  ID da regra  |  Prioridade  |  Condições  |  Ação  | 
| --- | --- | --- | --- | 
| `abc123` |  1  |  Se a solicitação contiver `pets`  |  Invoque o estágio `Prod` da API `PetStore`.  | 
| `000zzz` |  5  |  Se a solicitação contiver cabeçalhos `Cookie` e `*ux=beta*` e se o caminho base contiver `/refunds` |  Invoque o estágio `Beta` da API `Refunds`.  | 

A tabela a seguir mostra mapeamentos de API para `https://petstore.backup.example.com`.


|  Mapeamento de API  |  API selecionada  | 
| --- | --- | 
|  `/refunds`  |  Invoque o estágio `Prod` da API `Refunds`.  | 
|  `(none)`  |  Invoque o estágio `Prod` da API `Search`.  | 

O diagrama a seguir mostra como o API Gateway aplica as regras de roteamento e os mapeamentos de API anteriores a solicitações de exemplo. As solicitações de exemplo estão resumidas na tabela após esse diagrama.

![Diagrama de como o API Gateway aplica as regras de roteamento e os mapeamentos de API anteriores.](http://docs.aws.amazon.com/pt_br/apigateway/latest/developerguide/images/rr-diagram.png)


A tabela a seguir mostra como o API Gateway aplica as regras de roteamento e os mapeamentos de API anteriores a solicitações de exemplo.


| Solicitação | API selecionada | Explicação | 
| --- | --- | --- | 
| `https://petstore.diagram.com/pets` | O estágio `Prod` da API `PetStore`. | A solicitação corresponde à regra de roteamento `abc123`. | 
| `https://petstore.diagram.example.com/refunds -h "Cookie:lang=en-us;ux=beta"` | O estágio `Beta` da API `Refunds`. | A solicitação corresponde à regra de roteamento `000zzz`. O cabeçalho `Cookie` contém a correspondência `*contains*` correta e a correspondência do caminho base para essa condição.  | 
| `https://petstore.diagram.example.com/refunds` | O estágio `Prod` da API `Refunds`.  | A solicitação não tem os cabeçalhos necessários para fazer a correspondência com a regra de roteamento `zzz000`. Se o API Gateway não conseguir fazer a correspondência com uma regra de roteamento, ele retornará aos mapeamentos de API. O API Gateway pode associar o caminho base ao estágio `Prod` da API `Refunds`.  | 
| `https://petstore.diagram.example.com/` | O estágio `Prod` da API `Search`.  | A solicitação faz a correspondência entre o mapeamento de API e o caminho vazio `(none)`. | 

## Exemplo 3: regras de roteamento e mapeamentos de API com vários níveis
<a name="rest-api-routing-rules-examples-rule-and-mappings-with-multiple-levels"></a>

Neste exemplo, o nome de domínio personalizado `https://petstore.backup.example.com` tem o modo de roteamento definido como `ROUTING_RULE_THEN_API_MAPPING` e as regras de roteamento e mapeamentos de API a seguir.

A tabela a seguir mostra regras de roteamento para `https://petstore.backup.example.com`.


|  ID da regra  |  Prioridade  |  Condições  |  Ação  | 
| --- | --- | --- | --- | 
| `abc123` |  10  |  Se a solicitação contiver cabeçalho: `Hello:World`  |  API de destino 1  | 
| `000zzz` |  50  |  Se a solicitação contiver cabeçalhos `Accept`:`image/webp` e `Pet:Dog-*` e se o caminho base contiver `PetStoreShopper` | API de destino 2 | 

A tabela a seguir mostra mapeamentos de API para `https://petstore.backup.example.com`.


|  Mapeamento de API  |  API selecionada  | 
| --- | --- | 
|  `PetStoreShopper`  |  API de destino 3  | 
|  `PetStoreShopper/cats`  |  API de destino 4  | 

A tabela a seguir mostra como o API Gateway aplica as regras de roteamento e os mapeamentos de API anteriores a solicitações de exemplo.


| Solicitação | API selecionada | Explicação | 
| --- | --- | --- | 
| `https://petstore.example.com/PetStoreShopper -h "Accept:image/webp", "Pet:Cats" ` | API de destino 3 | A solicitação não tem os cabeçalhos necessários para fazer a correspondência com a regra de roteamento `zzz000`. Se o API Gateway não conseguir fazer a correspondência com uma regra de roteamento, ele retornará aos mapeamentos de API. O API Gateway pode associar o caminho base à API de destino 3. | 
| `https://petstore.example.com/PetStoreShopper/cats -h "Hello:World"` | API de destino 1 | A solicitação corresponde à regra de roteamento `abc123`. Se o modo de roteamento estiver definido como `ROUTING_RULE_THEN_API_MAPPING`, as regras de roteamento sempre terão prioridade sobre os mapeamentos de API. | 
| `https://petstore.example.com/Admin -h "Pet:Dog-Bella"` | Nenhum | A solicitação não corresponde a nenhuma regra de roteamento ou mapeamento de API. Como não há uma regra de roteamento padrão, o API Gateway rejeita a chamada e envia um código de status `403 Forbidden` ao autor da chamada. | 

## Exemplo 4: regras de roteamento para nomes de domínio curinga
<a name="rest-api-routing-rules-examples-rule-for-wildcard-domains"></a>

Neste exemplo, o nome de domínio personalizado `https://*.example.com` é um nome de domínio curinga. O curinga aceita todos os subdomínios que são roteados de volta para o mesmo domínio. Os exemplos de regra de roteamento a seguir alteram esse comportamento para permitir que subdomínios sejam roteados para diferentes APIs de destino usando o cabeçalho `Host`.

A tabela a seguir mostra regras de roteamento para `https://*.example.com`.


|  ID da regra  |  Prioridade  |  Condições  |  Ação  | 
| --- | --- | --- | --- | 
| `abc123` |  10  |  Se a solicitação contiver cabeçalho: `Host:a.example.com`  |  API de destino 1  | 
| `000zzz` |  50  |  Se a solicitação contiver cabeçalho: `Host:b.example.com` | API de destino 2 | 
| `efg456` |  500  | Nenhum | API de destino 3 | 

A tabela a seguir mostra como o API Gateway aplica as regras de roteamento anteriores a solicitações de exemplo.


| Solicitação | API selecionada | Explicação | 
| --- | --- | --- | 
| `https://a.example.com` | API de destino 1 | O cabeçalho `Host` é `a.example.com`. Essa solicitação corresponde à regra de roteamento `abc123`. | 
| `https://b.example.com` | API de destino 2 | O cabeçalho `Host` é `b.example.com`. Essa solicitação corresponde à regra de roteamento `000zzz`. | 
| `https://testing.example.com` | API de destino 3 | Isso corresponde à regra de roteamento abrangente `efg456`. | 