

# Ejemplos de cómo API Gateway evalúa las reglas de enrutamiento
<a name="rest-api-routing-rules-examples"></a>

A continuación se muestran cuatro ejemplos de cómo API Gateway evalúa las reglas de enrutamiento y las asignaciones de API.

## Ejemplo 1: solo reglas de enrutamiento
<a name="rest-api-routing-rules-examples-rule-only"></a>

En este ejemplo, el nombre de dominio personalizado `https://petstore.example.com` tiene el modo de enrutamiento establecido en `ROUTING_RULE_ONLY` y tiene las siguientes reglas de enrutamiento y prioridades.


|  ID de regla  |  Prioridad  |  Condiciones  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   Si la solicitud contiene el encabezado `Hello:World`   |   API de destino 1   | 
|  `zzz000`  |   50   |   Si la solicitud contiene los encabezados `Accept:image/webp` y `Pet:Dog-*` y si la ruta base contiene `PetStoreShopper`  |   API de destino 2   | 
|  `efg456`  |   100   |  Ninguno  |   API de destino 3   | 

En la siguiente tabla se muestra cómo API Gateway aplica las reglas de enrutamiento anteriores a las solicitudes de ejemplo.


| Solicitud | API seleccionada | Explicación | 
| --- | --- | --- | 
|  `https://petstore.example.com -h "Hello:World"`  |  API de destino 1  |  La solicitud coincide con la regla de enrutamiento `abc123`.  | 
|  `https://petstore.example.com/PetStoreShopper -h "Hello:World", "Pet:Dog-Bella", "Accept:image/webp"`  |  API de destino 1  |  API Gateway evalúa todas las reglas de enrutamiento por orden de prioridad. La regla de enrutamiento `abc123` tiene la primera prioridad y las condiciones coinciden, por lo que API Gateway invoca la API de destino 1. Aunque las condiciones de la solicitud también coinciden con la regla de enrutamiento `zzz000`, API Gateway no evalúa ninguna otra regla de enrutamiento después de establecer una coincidencia.  | 
|  `https://petstore.example.com/PetStoreShopper -h "Pet:Dog-Bella", "Accept:image/webp"`  |  API de destino 2  |  La solicitud coincide con la regla de enrutamiento `zzz000`. Esta coincidencia se debe a que la cadena `Pet:Dog-Bella` coincidía con `Pet:Dog-*`  | 
|  `https://petstore.example.com/PetStoreShopper -h "Pet:Dog-Bella"`  |  API de destino 3  |  La solicitud no coincide con la regla de enrutamiento `abc123`. La solicitud no coincide con la regla de enrutamiento `zzz000` porque no están presentes todos los encabezados requeridos. La siguiente regla de prioridad coincide con todas las solicitudes entrantes, por lo que API Gateway invoca la API de destino 3.  | 

## Ejemplo 2: reglas de enrutamiento y asignaciones de API
<a name="rest-api-routing-rules-examples-rule-and-mappings"></a>

En este ejemplo, el nombre de dominio personalizado `https://petstore.diagram.example.com` tiene el modo de enrutamiento establecido en `ROUTING_RULE_THEN_API_MAPPING` y tiene las siguientes reglas de enrutamiento y asignaciones de API.


|  ID de regla  |  Prioridad  |  Condiciones  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   1   |   Si la base de la solicitud contiene `pets`   |   Invoque la etapa `Prod` de la API `PetStore`.   | 
|  `000zzz`  |   5   |   Si la solicitud contiene los encabezados `Cookie`:`*ux=beta*` y si la ruta base contiene `/refunds`  |   Invoque la etapa `Beta` de la API `Refunds`.   | 

En la siguiente tabla se muestran las asignaciones de la API para `https://petstore.backup.example.com`.


|  Mapeo de API  |  API seleccionada  | 
| --- | --- | 
|   `/refunds`   |   Invoque la etapa `Prod` de la API `Refunds`.   | 
|   `(none)`   |   Invoque la etapa `Prod` de la API `Search`.   | 

En el siguiente diagrama se muestra cómo API Gateway aplica las reglas de enrutamiento anteriores a las solicitudes de ejemplo. Las solicitudes de ejemplo se resumen en la tabla que sigue a este diagrama.

![\[Diagrama de cómo API Gateway aplica las reglas de enrutamiento anteriores y las asignaciones de API.\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/rr-diagram.png)


En la siguiente tabal se muestra cómo API Gateway aplica las reglas de enrutamiento anteriores a las solicitudes de ejemplo.


| Solicitud | API seleccionada | Explicación | 
| --- | --- | --- | 
|  `https://petstore.diagram.com/pets`  |  La etapa `Prod` de la API `PetStore`.  |  La solicitud coincide con la regla de enrutamiento `abc123`.  | 
|  `https://petstore.diagram.example.com/refunds -h "Cookie:lang=en-us;ux=beta"`  |  La etapa `Beta` de la API `Refunds`.  |  La solicitud coincide con la regla de enrutamiento `000zzz`. El encabezado `Cookie` contiene la coincidencia `*contains*` correcta y la coincidencia de ruta base para esta condición.   | 
|  `https://petstore.diagram.example.com/refunds`  |  La etapa `Prod` de la API `Refunds`.   |  La solicitud no tiene los encabezados necesarios para la coincidencia con la regla de enrutamiento `zzz000`. Si API Gateway no puede hacer coincidir correctamente una regla de enrutamiento, recurre a las asignaciones de API. API Gateway puede asignar la ruta base a la etapa `Prod` de la API `Refunds`.   | 
|  `https://petstore.diagram.example.com/`  |  La etapa `Prod` de la API `Search`.   |  La solicitud coincide con la asignación de la API a la ruta vacía `(none)`.  | 

## Ejemplo 3: reglas de enrutamiento y asignaciones de API con varios niveles
<a name="rest-api-routing-rules-examples-rule-and-mappings-with-multiple-levels"></a>

En este ejemplo, el nombre de dominio personalizado `https://petstore.backup.example.com` tiene el modo de enrutamiento establecido en `ROUTING_RULE_THEN_API_MAPPING` y tiene las siguientes reglas de enrutamiento y asignaciones de API.

En la siguiente tabla se muestran las reglas de enrutamiento para `https://petstore.backup.example.com`.


|  ID de regla  |  Prioridad  |  Condiciones  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   Si la solicitud contiene el encabezado `Hello:World`   |   API de destino 1   | 
|  `000zzz`  |   50   |   Si la solicitud contiene los encabezados `Accept`:`image/webp` y `Pet:Dog-*` y si la ruta base contiene `PetStoreShopper`  |  API de destino 2  | 

En la siguiente tabla se muestran las asignaciones de la API para `https://petstore.backup.example.com`.


|  Mapeo de API  |  API seleccionada  | 
| --- | --- | 
|   `PetStoreShopper`   |   API de destino 3   | 
|   `PetStoreShopper/cats`   |   API de destino 4   | 

En la siguiente tabal se muestra cómo API Gateway aplica las reglas de enrutamiento anteriores a las solicitudes de ejemplo.


| Solicitud | API seleccionada | Explicación | 
| --- | --- | --- | 
|  `https://petstore.example.com/PetStoreShopper -h "Accept:image/webp", "Pet:Cats" `  |  API de destino 3  |  La solicitud no tiene los encabezados necesarios para la coincidencia con la regla de enrutamiento `zzz000`. Si API Gateway no puede hacer coincidir correctamente una regla de enrutamiento, recurre a las asignaciones de API. API Gateway puede asignar la ruta base a la API de destino 3.  | 
|  `https://petstore.example.com/PetStoreShopper/cats -h "Hello:World"`  |  API de destino 1  |  La solicitud coincide con la regla de enrutamiento `abc123`. Si el modo de enrutamiento se establece en `ROUTING_RULE_THEN_API_MAPPING`, las reglas de enrutamiento siempre tienen prioridad sobre las asignaciones de API.  | 
|  `https://petstore.example.com/Admin -h "Pet:Dog-Bella"`  |  Ninguno  |  La solicitud no coincide con ninguna regla de enrutamiento ni asignación de API. Dado que no hay ninguna regla de enrutamiento predeterminada, API Gateway rechaza la llamada y envía al intermediario un código de estado `403 Forbidden`.  | 

## Ejemplo 4: reglas de enrutamiento para nombres de dominio comodín
<a name="rest-api-routing-rules-examples-rule-for-wildcard-domains"></a>

En este ejemplo, el nombre de dominio personalizado `https://*.example.com` es un nombre de dominio comodín. El comodín admite todos los subdominios que enrutan al mismo dominio. Las siguientes reglas de enrutamiento de ejemplo cambian este comportamiento para permitir que los subdominios enruten a diferentes API de destino mediante el encabezado `Host`.

En la siguiente tabla se muestran las reglas de enrutamiento para `https://*.example.com`.


|  ID de regla  |  Prioridad  |  Condiciones  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   Si la solicitud contiene el encabezado `Host:a.example.com`   |   API de destino 1   | 
|  `000zzz`  |   50   |   Si la solicitud contiene encabezados `Host:b.example.com`  |  API de destino 2  | 
|  `efg456`  |   500   |  Ninguno  |  API de destino 3  | 

En la siguiente tabla se muestra cómo API Gateway aplica las reglas de enrutamiento anteriores a las solicitudes de ejemplo.


| Solicitud | API seleccionada | Explicación | 
| --- | --- | --- | 
|  `https://a.example.com`  |  API de destino 1  |  El encabezado `Host` es `a.example.com`. Esta solicitud coincide con la regla de enrutamiento `abc123`.  | 
|  `https://b.example.com`  |  API de destino 2  |  El encabezado `Host` es `b.example.com`. Esta solicitud coincide con la regla de enrutamiento `000zzz`.  | 
|  `https://testing.example.com`  |  API de destino 3  |  Coincide con la regla de enrutamiento catch-all `efg456`.  | 