

# Compresión de la carga útil para las API de REST en API Gateway
<a name="api-gateway-gzip-compression-decompression"></a>

 API Gateway permite que el cliente llame a la API con cargas comprimidas utilizando una de las [codificaciones de contenido compatibles](api-gateway-enable-compression.md#api-gateway-supported-content-encodings). De forma predeterminada, API Gateway admite la descompresión de la carga de solicitud del método. Sin embargo, debe configurar la API para que se habilite la compresión de la carga de respuesta del método. 

 Para habilitar la compresión de una [https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html), establezca la propiedad [https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html#minimumCompressionSize](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html#minimumCompressionSize) en un número entero que no sea negativo y esté comprendido entre 0 y 10485760 (10 M bytes) cuando cree la API o después de crearla. Para deshabilitar la compresión de la API, establezca `minimumCompressionSize` en null o elimínelo por completo. Puede habilitar o desactivar la compresión de una API mediante la consola de API Gateway, la AWS CLI o la API REST de API Gateway. 

Si desea que la compresión se aplique en una carga de cualquier tamaño, establezca el valor `minimumCompressionSize` en cero. Sin embargo, es posible que los datos pequeños, al comprimirse, aumenten de tamaño. Además, la compresión de API Gateway y la descompresión en el cliente podrían aumentar la latencia general y requerir más tiempo de procesamiento. Debe ejecutar los casos de prueba en la API para determinar un valor óptimo.

El cliente puede enviar una solicitud de API con una carga comprimida y un encabezado `Content-Encoding` adecuado para que API Gateway descomprima y aplique las plantillas de asignaciones correspondientes antes de pasar la solicitud al punto de conexión de integración. Una vez que la compresión está habilitada y la API está implementada, el cliente puede recibir una respuesta de API con una carga comprimida si especifica un encabezado `Accept-Encoding` adecuado en la solicitud del método. 

Si el punto de conexión de integración espera y devuelve cargas JSON sin comprimir, las plantillas de asignación configuradas para una carga JSON sin comprimir serán aplicables a la carga comprimida. En el caso de las cargas de solicitud de métodos comprimidas, API Gateway las descomprime, aplica la plantilla de asignación y pasa la solicitud comprimida al punto de conexión de integración. En el caso de las cargas de respuesta de integración sin comprimir, API Gateway aplica la plantilla de asignación, comprime la carga asignada y devuelve la carga comprimida al cliente. 

**Topics**
+ [Habilitación de la compresión de la carga para una API en API Gateway](api-gateway-enable-compression.md)
+ [Llamada a un método de API con una carga comprimida en API Gateway](api-gateway-make-request-with-compressed-payload.md)
+ [Recepción de una respuesta de API con una carga comprimida en API Gateway](api-gateway-receive-response-with-compressed-payload.md)

# Habilitación de la compresión de la carga para una API en API Gateway
<a name="api-gateway-enable-compression"></a>

Puede habilitar la compresión de una API mediante la consola de API Gateway, la AWS CLI o un AWS SDK.

En el caso de una API existente, debe implementar la API después de habilitar la compresión para que el cambio surta efecto. Para una nueva API, puede implementar la API después de que se haya completado la configuración de la API.

**nota**  
La codificación de contenido de mayor prioridad debe ser una compatible con la API Gateway. Si no es así, la compresión no se aplica a la carga de la respuesta.

**Topics**
+ [Habilitación de la compresión de la carga en una API a través de la consola de API Gateway](#api-gateway-enable-compression-console)
+ [Habilitación de la compresión de carga en una API a través de la AWS CLI](#api-gateway-enable-compression-cli)
+ [Codificaciones de contenido admitidas por API Gateway](#api-gateway-supported-content-encodings)

## Habilitación de la compresión de la carga en una API a través de la consola de API Gateway
<a name="api-gateway-enable-compression-console"></a>

En el siguiente procedimiento, se describe cómo habilitar la compresión de la carga en una API. 

**Para habilitar la compresión de carga a través de la consola de API Gateway**

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

1. Seleccione una API existente o cree una nueva.

1. En el panel de navegación principal, elija **Configuración de la API**. 

1. En la sección **Detalles de la API**, elija **Editar**.

1. Active la **codificación de contenido** para habilitar la compresión de carga. En **Tamaño mínimo del cuerpo**, ingrese un número para el tamaño mínimo de compresión (en bytes). Para desactivar la compresión, desactive la opción **codificación de contenido**.

1. Elija **Guardar cambios**.

## Habilitación de la compresión de carga en una API a través de la AWS CLI
<a name="api-gateway-enable-compression-cli"></a>



El siguiente comando [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html) permite crear una API con compresión de la carga útil:

```
aws apigateway create-rest-api \
    --name "My test API" \
    --minimum-compression-size 0
```

El siguiente comando [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html) permite habilitar la compresión de la carga útil para una API existente:

```
aws apigateway update-rest-api \
    --rest-api-id 1234567890 \
    --patch-operations op=replace,path=/minimumCompressionSize,value=0
```

La propiedad `minimumCompressionSize` presenta un valor entero no negativo entre 0 y 10485760 (10 megabytes). Mide el umbral de compresión. Si el tamaño de la carga es menor que este valor, la compresión o la descompresión no se aplican en la carga. Si se establece en cero, la compresión está permitida para cualquier tamaño de carga.

El siguiente comando [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html) permite desactivar la compresión de la carga útil:

```
aws apigateway update-rest-api \
    --rest-api-id 1234567890 \
    --patch-operations op=replace,path=/minimumCompressionSize,value=
```

También puede definir `value` en una cadena vacía `""` u omitir la propiedad `value` en su conjunto en la llamada anterior.

## Codificaciones de contenido admitidas por API Gateway
<a name="api-gateway-supported-content-encodings"></a>

API Gateway admite las siguientes codificaciones de código:
+ `deflate`
+ `gzip`
+ `identity`

API Gateway también admite el siguiente formato de encabezado `Accept-Encoding`, conforme a la especificación [RFC 7231](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.4):
+ `Accept-Encoding:deflate,gzip`
+ `Accept-Encoding:`
+ `Accept-Encoding:*`
+ `Accept-Encoding:deflate;q=0.5,gzip;q=1.0`
+ `Accept-Encoding:gzip;q=1.0,identity;q=0.5,*;q=0`

# Llamada a un método de API con una carga comprimida en API Gateway
<a name="api-gateway-make-request-with-compressed-payload"></a>

Para realizar una solicitud de API con una carga comprimida, el cliente debe configurar el encabezado `Content-Encoding` utilizando una de las [codificaciones de contenido admitidas](api-gateway-enable-compression.md#api-gateway-supported-content-encodings). 

Supongamos que es un cliente de API y que quiere llamar al método PetStore (`POST /pets`). No llame al método utilizando la siguiente salida JSON:

```
POST /pets
Host: {petstore-api-id}.execute-api.{region}.amazonaws.com
Content-Length: ...

{
  "type": "dog",
  "price": 249.99
}
```

En su lugar, puede llamar al método con la misma carga comprimida utilizando la codificación GZIP:

```
POST /pets
Host: {petstore-api-id}.execute-api.{region}.amazonaws.com
Content-Encoding:gzip
Content-Length: ...

���RPP*�,HU�RPJ�OW��e&���L,�,-y�j
```

Cuando API Gateway recibe la solicitud, comprueba si la codificación de contenido especificada es compatible. A continuación, intenta descomprimir la carga con la codificación de contenido especificada. Si la descompresión se realiza correctamente, envía la solicitud al punto de conexión de integración. Si la codificación especificada no es compatible o la carga suministrada no está comprimida con la codificación especificada, API Gateway devuelve la respuesta de error `415 Unsupported Media Type`. El error no se registra en CloudWatch Logs, si se produce en las fases iniciales de descompresión antes de que se identifiquen la API y la etapa. 

# Recepción de una respuesta de API con una carga comprimida en API Gateway
<a name="api-gateway-receive-response-with-compressed-payload"></a>

Cuando realiza una solicitud en una API habilitada para la compresión, el cliente puede optar por recibir una carga de respuesta comprimida de un formato específico especificando un encabezado `Accept-Encoding` con una [codificación de contenido compatible](api-gateway-enable-compression.md#api-gateway-supported-content-encodings). 

API Gateway solo comprime la carga de respuesta cuando se cumplen las siguientes condiciones:
+  La solicitud entrante tiene el encabezado `Accept-Encoding` con el formato y la codificación de contenido compatibles. 
**nota**  
Si no se define el encabezado, el valor predeterminado es `*` tal y como se define en [RFC 7231](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.4). En tal caso, API Gateway no comprime la carga útil. Algunos navegadores o clientes pueden añadir `Accept-Encoding` (por ejemplo `Accept-Encoding:gzip, deflate, br`) automáticamente para las solicitudes habilitadas para compresión. Esto puede activar la compresión de la carga útil en API Gateway. Sin una especificación explícita de los valores del encabezado `Accept-Encoding` admitidos, API Gateway no comprime la carga. 
+  `minimumCompressionSize` está establecido en la API para habilitar la compresión.
+  La respuesta de integración no tiene un encabezado `Content-Encoding`. 
+  El tamaño de la carga de respuesta de integración, una vez que se aplica la plantilla de asignación correspondiente, es mayor o igual que el valor `minimumCompressionSize` especificado.

API Gateway aplica una plantilla de asignación configurada para la respuesta de integración antes de que se comprima la carga. Si la respuesta de integración contiene un encabezado `Content-Encoding`, API Gateway presupone que la carga de respuesta de integración ya está comprimida y omite el proceso de compresión.

Un ejemplo de esto es el de la API de PetStore y la siguiente solicitud:

```
GET /pets
Host: {petstore-api-id}.execute-api.{region}.amazonaws.com
Accept: application/json
```

El backend responde a la solicitud con una carga JSON sin comprimir similar a la siguiente:

```
200 OK

[
  { 
    "id": 1, 
    "type": "dog", 
    "price": 249.99 
  }, 
  { 
    "id": 2, 
    "type": "cat", 
    "price": 124.99 
  }, 
  { 
    "id": 3, 
    "type": "fish", 
    "price": 0.99 
  } 
]
```

Para recibir esta salida como una carga comprimida, el cliente de la API puede enviar una solicitud como la siguiente:

```
GET /pets
Host: {petstore-api-id}.execute-api.{region}.amazonaws.com
Accept-Encoding:gzip
```

El cliente recibe la respuesta con un encabezado `Content-Encoding` y una carga codificada en GZIP similar a la siguiente: 

```
200 OK
Content-Encoding:gzip
...

���RP�

J�)JV
�:P^IeA*������+(�L	�X�YZ�ku0L0B7!9��C#�&����Y��a���^�X
```

Cuando la carga de respuesta está comprimida, solo el tamaño de los datos comprimidos se tiene en cuenta al facturar la transferencia de información.