

# Asignación de etapas de API a un nombre de dominio personalizado para las API HTTP
<a name="http-api-mappings"></a>

Las asignaciones de API se utilizan para conectar etapas de la API a un nombre de dominio personalizado. Después de crear un nombre de dominio y configurar registros DNS, se utilizan asignaciones de API para enviar tráfico a las API a través del nombre de dominio personalizado.

Una asignación de API especifica una API, una etapa y, de forma opcional, una ruta que se utilizará para la asignación. Por ejemplo, puede asignar la etapa de `production` de una API a `https://api.example.com/orders`.

Puede asignar etapas de API HTTP y de API de REST al mismo nombre de dominio personalizado.

Antes de crear una asignación de API, debe tener una API, una etapa y un nombre de dominio personalizado. Para obtener más información sobre cómo crear un nombre de dominio personalizado, consulte [Configuración de un nombre de dominio personalizado regional en API Gateway](apigateway-regional-api-custom-domain-create.md).

## Enrutamiento de solicitudes de la API
<a name="http-api-mappings-evalutation"></a>

Puede configurar asignaciones de API con varios niveles; por ejemplo `orders/v1/items` y `orders/v2/items`.

En el caso de las asignaciones de API con varios niveles, API Gateway enruta las solicitudes a la asignación de API con la ruta coincidente más larga. API Gateway solo considera las rutas configuradas para las asignaciones de API, y no las rutas de la API, para seleccionar la API que se va a invocar. Si ninguna ruta coincide con la solicitud, API Gateway envía la solicitud a la API que ha asignado a la ruta vacía `(none)`.

En el caso de los nombres de dominio personalizados que utilizan asignaciones de API con varios niveles, API Gateway enruta las solicitudes a la asignación de API con el prefijo coincidente más largo.

Por ejemplo, pensemos en un nombre de dominio personalizado `https://api.example.com` con las siguientes asignaciones de API:

1. `(none)` asignado a la API 1.

1. `orders` asignado a la API 2.

1. `orders/v1/items` asignado a la API 3.

1. `orders/v2/items` asignado a la API 4.

1. `orders/v2/items/categories` asignado a la API 5.


| Solicitud | API seleccionada | Explicación | 
| --- | --- | --- | 
|  `https://api.example.com/orders`  |  `API 2`  |  La solicitud coincide exactamente con esta asignación de API.  | 
|  `https://api.example.com/orders/v1/items`  |  `API 3`  |  La solicitud coincide exactamente con esta asignación de API.  | 
|  `https://api.example.com/orders/v2/items`  |  `API 4`  |  La solicitud coincide exactamente con esta asignación de API.  | 
|  `https://api.example.com/orders/v1/items/123`  |  `API 3`  |  API Gateway elige la asignación con la ruta de coincidencia más larga. El `123` al final de la solicitud no afecta a la selección.  | 
|  `https://api.example.com/orders/v2/items/categories/5`  |  `API 5`  |  API Gateway elige la asignación con la ruta de coincidencia más larga.  | 
|  `https://api.example.com/customers`  |  `API 1`  |  API Gateway utiliza la asignación vacía como un catch-all.  | 
|  `https://api.example.com/ordersandmore`  |  `API 2`  |  API Gateway elige la asignación con el prefijo de coincidencia más largo. En el caso de un nombre de dominio personalizado configurado con asignaciones de un solo nivel, por ejemplo, solo `https://api.example.com/orders` y `https://api.example.com/`, API Gateway elegiría `API 1`, ya que no hay una ruta que coincida con `ordersandmore`.  | 

## Restricciones
<a name="http-api-mappings-restrictions"></a>
+ En el caso de una asignación de API, el nombre de dominio personalizado y las API asignadas deben pertenecer a la misma cuenta de AWS.
+ Las asignaciones de API deben contener solo letras, números y los siguientes caracteres: `$-_.+!*'()/`.
+ La longitud máxima de la ruta en una asignación de API es de 300 caracteres.
+ Puede tener 200 asignaciones de API con varios niveles para cada nombre de dominio. Este límite no incluye la asignación de la API con niveles únicos, como `/prod`.
+ Solo puede asignar API HTTP a un nombre de dominio regional personalizado con la política de seguridad de TLS 1.2.
+ No puede asignar las API de WebSocket al mismo nombre de dominio personalizado que una API HTTP o API REST.
+ Si crea una asignación de API con varios niveles, API Gateway convierte todos los nombres de encabezado a minúsculas.

## Creación de una asignación de API
<a name="http-api-mappings-examples"></a>

Para crear una asignación de API, primero debe crear un nombre de dominio personalizado, una API y una etapa. Para obtener información sobre cómo crear un nombre de dominio personalizado, consulte [Configuración de un nombre de dominio personalizado regional en API Gateway](apigateway-regional-api-custom-domain-create.md).

Para ver ejemplos de las plantillas de AWS Serverless Application Model que crean todos los recursos, consulte [Sessions With SAM](https://github.com/aws-samples/sessions-with-aws-sam/tree/master/custom-domains) en GitHub.

------
#### [ Consola de administración de AWS ]

**Para crear una asignación de API**

1. Inicie sesión en la consola de API Gateway, en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Elija **Nombres de dominio personalizados**.

1. Seleccione un nombre de dominio personalizado que ya haya creado.

1. Elija **Asignaciones de API**.

1. Elija **Configurar asignaciones de API**.

1. Seleccione **Agregar nueva asignación**.

1. Introduzca una **API**, una **Etapa** y, de forma opcional, una **Ruta**.

1. Seleccione **Save**.

------
#### [ AWS CLI ]

El siguiente comando [create-api-mapping](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-api.html) permite crear una asignación de API. En este ejemplo, API Gateway envía solicitudes a `api.example.com/v1/orders` a la API y a la etapa especificadas.

```
aws apigatewayv2 create-api-mapping \
    --domain-name api.example.com \
    --api-mapping-key v1/orders \
    --api-id a1b2c3d4 \
    --stage test
```

------
#### [ CloudFormation ]

En el siguiente ejemplo de CloudFormation, se crea una asignación de API.

```
MyApiMapping:
  Type: 'AWS::ApiGatewayV2::ApiMapping'
  Properties:
    DomainName: api.example.com
    ApiMappingKey: 'orders/v2/items'
    ApiId: !Ref MyApi
    Stage: !Ref MyStage
```

------