

# 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. 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`.  | 