Reglas de enrutamiento para conectar las etapas de API a un nombre de dominio personalizado para las API de REST - Amazon API Gateway

Reglas de enrutamiento para conectar las etapas de API a un nombre de dominio personalizado para las API de REST

Una regla de enrutamiento es un conjunto de condiciones que, cuando coinciden, invocan una acción. Por ejemplo, una regla puede enrutar cualquier solicitud entrante a un nombre de dominio personalizado que contenga el encabezado Hello:World y contenga la ruta base users a la etapa production de una API de REST.

Las reglas se evalúan por orden de prioridad, y si establece el modo de enrutamiento en ROUTING_RULE_THEN_API_MAPPING, API Gateway siempre evalúa todas las reglas de enrutamiento antes de evaluar cualquier asignación de API. En la siguiente lista se describe cómo una regla de enrutamiento utiliza condiciones, acciones y prioridades.

Condiciones

Cuando se cumplen las condiciones de una regla, se llevan a cabo sus acciones. API Gateway admite hasta dos condiciones de encabezado y una condición de ruta. API Gateway evalúa conjuntamente las condiciones de encabezado y las condiciones de ruta base.

Puede crear una regla sin condiciones. Cuando API Gateway evalúa esta regla, siempre se realiza la acción. Puede crear una regla sin ninguna condición como regla catch-all.

Para obtener más información sobre las condiciones de encabezado, consulte Condiciones de encabezado de coincidencia. Para obtener más información sobre las condiciones de ruta, consulte Coincidencia de condiciones de ruta base.

Acciones

Las acciones son el resultado de la coincidencia de condiciones con una regla de enrutamiento. Actualmente, la única acción admitida es invocar una etapa de una API de REST.

Cada regla puede tener una acción.

Priority (Prioridad)

La prioridad determina en qué orden se evalúan las reglas, del valor más bajo al más alto. Las reglas no pueden tener la misma prioridad.

Puede establecer la prioridad entre 1 y 1 000 000. Si una regla tiene una prioridad de uno, API Gateway la evalúa en primer lugar. Le recomendamos que, cuando cree una regla, agregue espacios en las prioridades. Esto lo ayuda a cambiar la prioridad de las reglas y a agregar nuevas reglas. Para obtener más información, consulte Cambio de la prioridad de una regla de enrutamiento.

Para ver ejemplos de cómo API Gateway evalúa las reglas de enrutamiento, consulte Ejemplos de cómo API Gateway evalúa las reglas de enrutamiento.

Tipos de condiciones de las reglas de enrutamiento de API Gateway

En la siguiente sección se describen los tipos de condiciones de las reglas de enrutamiento. API Gateway solo hace coincidir una regla si se cumplen todas las condiciones.

Condiciones de encabezado de coincidencia

Al crear una condición de encabezado, puede hacer coincidir el nombre del encabezado y el valor glob del encabezado, como Hello:World. API Gateway utiliza una coincidencia literal para validar las condiciones de encabezado de coincidencia. La condición puede utilizar hasta dos encabezados con AND entre ellos. Por ejemplo, la condición puede coincidir si una solicitud entrante contiene Hello:World y x-version:beta.

La coincidencia del nombre del encabezado no distingue entre mayúsculas y minúsculas, pero el valor glob del encabezado sí. Hello:World coincidirá con hello:World, pero no con Hello:world.

Para ver una lista de valores de encabezado restringidos, consulte Restricciones.

Uso de caracteres comodín con condiciones de encabezado

Solo puede utilizar caracteres comodín en el valor glob del encabezado y el carácter comodín debe ser *prefix-match, suffix-match* o *contains*. En la siguiente tabla se muestran ejemplos de cómo utilizar comodines para la coincidencia de condiciones de encabezado.

Condiciones de encabezado Solicitudes que coinciden con la regla de enrutamiento Solicitudes que no coinciden con la regla de enrutamiento

x-version: a*

  • x-version: account

  • x-version: alpha

  • x-version: backup

  • x-version: beta

  • x-version: users

x-version: *a

  • x-version: alpha

  • x-version: beta

  • x-version: account

  • x-version: backup

  • x-version: users

x-version: *a*

  • x-version: account

  • x-version: alpha

  • x-version: backup

  • x-version: beta

  • x-version: users

x-version: *a* y x-version: *b*

  • x-version: backup

  • x-version: beta

  • x-version: account

  • x-version: alpha

  • x-version: users

x-version: b* y x-version: *a

  • x-version: beta

  • x-version: account

  • x-version: alpha

  • x-version: backup

  • x-version: users

x-version: *

  • x-version: account

  • x-version: alpha

  • x-version: backup

  • x-version: beta

  • x-version: users

Ninguno

Si crea condiciones para varios valores de encabezado, como Accept:application/json,text/xml, le recomendamos que utilice *contains* para las condiciones de encabezado y evite crear condiciones utilizando el carácter de coma (,).

Dado que API Gateway enruta las condiciones de encabezado literalmente, las coincidencias semánticas podrían enrutarse de forma diferente. En la siguiente tabla se muestra la diferencia en los resultados de las reglas de enrutamiento.

Condiciones de encabezado Solicitudes que coinciden con la regla de enrutamiento Solicitudes que no coinciden con la regla de enrutamiento

Accept: *json

  • Accept:application/json Accept:text/xml

  • Accept:application/json,text/xml

Accept: *json*

  • Accept:application/json Accept:text/xml

  • Accept:application/json,text/xml

Ninguno

Coincidencia de condiciones de ruta base

Al crear una condición de ruta base, si la solicitud entrante contiene la ruta especificada, la regla coincide. La coincidencia distingue entre mayúsculas y minúsculas, por lo que la ruta New/Users no coincidirá con new/users.

Puede crear una condición de ruta base solo para una ruta base.

Para obtener una lista de condiciones de ruta base restringidas, Restricciones.

Eliminación de la ruta base con condiciones de ruta base

Cuando crea una condición de ruta base, puede elegir eliminar la ruta base. Cuando elimina la ruta base, API Gateway elimina la ruta base coincidente entrante cuando invoca la API de destino. Este es el mismo comportamiento que cuando utiliza una asignación de API. Si no elimina la ruta base, API Gateway reenvía toda la ruta base a la API de destino. Le recomendamos que solo elimine la ruta base cuando vuelva a crear una asignación de API.

En la siguiente tabla se muestran ejemplos de cómo API Gateway evalúa la condición de eliminación de la ruta base.

Condición Eliminación de la ruta base Solicitud entrante Resultado

Si la ruta base contiene PetStoreShopper/dogs

True

GET https://example.com/PetStoreShopper/dogs

API Gateway llama al método GET del recurso /.

Si la ruta base contiene PetStoreShopper/dogs.

False

GET https://example.com/PetStoreShopper/dogs

API Gateway llama al método GET del recurso PetStoreShopper/dogs.

Si la ruta base contiene PetStoreShopper

True

GET https://example.com/PetStoreShopper/dogs

API Gateway llama al método GET del recurso dogs.

Si la ruta base contiene PetStoreShopper

False

GET https://example.com/PetStoreShopper/dogs

API Gateway llama al método GET del recurso PetStoreShopper/dogs.

Si la ruta base contiene PetStoreShopper

True

GET https://example.com/PetStoreShopper?birds=available

API Gateway llama al método GET del recurso / con el parámetro de cadena de consulta birds=available.

Si la ruta base contiene PetStoreShopper

False

GET https://example.com/PetStoreShopper?birds=available

API Gateway llama al método GET del recurso /PetStoreShopper con el parámetro de cadena de consulta birds=available.

Restricciones

  • La API de destino y el nombre de dominio personalizado deben estar en la misma cuenta de AWS.

  • Cada regla puede tener una API de destino.

  • Solo puede crear una regla de enrutamiento para un nombre de dominio personalizado privado hacia una API privada y para un nombre de dominio personalizado público hacia una API pública. No puede mezclar recursos públicos y privados.

  • Si el nombre de dominio personalizado tiene asignaciones de API tanto a las API de REST como de HTTP, no se admiten las reglas de enrutamiento.

  • El número de prioridad máximo es 1 000 000.

  • Restricciones de encabezado:

    • Cada condición anyOf solo puede contener un valor de encabezado.

    • Los únicos caracteres permitidos para los nombres de encabezado y los valores glob de encabezado están especificados por RFC 7230, que son a-z, A-Z, 0-9 y los siguientes caracteres especiales: *?-!#$%&'.^_`|~.

    • Puede utilizar un comodín en el valor glob del encabezado, pero el comodín debe ser *prefix-match, suffix-match* o *contains*. No puede utilizar * en medio de un valor glob de encabezado.

    • No se admiten nombres de encabezado con caracteres comodín.

    • El nombre del encabezado debe tener menos de 40 caracteres.

    • El valor glob del encabezado debe tener menos de 128 caracteres.

    • El valor glob del encabezado para una coincidencia de infijo debe tener menos de 40 caracteres.

    • Los siguientes encabezados no se admiten como condiciones:

      • access-control-*

      • apigw-*

      • Authorization

      • Connection

      • Content-Encoding

      • Content-Length

      • Content-Location

      • Forwarded

      • Keep-Alive

      • Origin

      • Proxy-Authenticate

      • Proxy-Authorization

      • TE

      • Trailers

      • Transfer-Encoding

      • Upgrade

      • x-amz-*

      • x-amzn-*

      • X-Forwarded-For

      • X-Forwarded-Host

      • X-Forwarded-Proto

      • Via

  • Restricciones de la ruta base:

    • La longitud de la ruta base debe ser inferior a 128 caracteres.

    • La ruta base debe contener solo letras, números y los siguientes caracteres: $-_.+!*'()/.

    • La ruta base no puede empezar ni terminar por el carácter de barra invertida (/).