

# Configurar una respuesta de gateway para una API REST mediante la consola de API Gateway
<a name="set-up-gateway-response-using-the-console"></a>

En el siguiente ejemplo se muestra cómo configurar una respuesta de puerta de enlace para una API de REST mediante la consola de API Gateway 

**Para personalizar una respuesta de gateway mediante 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. Elija una API de REST.

1. En el panel de navegación principal, elija **Respuestas de puerta de enlace**.

1. Elija un tipo de respuesta y, a continuación, elija **Editar**. En este tutorial, utilizamos **Falta el token de autenticación** como ejemplo. 

1. Puede cambiar el **Código de estado** generado por API Gateway para devolver un código de estado diferente según los requisitos de la API. En este ejemplo, la personalización cambia el código de estado del valor predeterminado (`403`) a `404`, porque este mensaje de error se produce cuando un cliente llama a un recurso no admitido o no válido que se considera no encontrado.

1. Para devolver encabezados personalizados, elija **Agregar encabezado de respuesta** en **Encabezados de respuesta**. Con fines ilustrativos, añadimos los siguientes encabezados personalizados: 

   ```
   Access-Control-Allow-Origin:'a.b.c'
   x-request-id:method.request.header.x-amzn-RequestId
   x-request-path:method.request.path.petId
   x-request-query:method.request.querystring.q
   ```

   En las asignaciones de encabezado anteriores, un nombre de dominio estático (`'a.b.c'`) se asigna al encabezado `Allow-Control-Allow-Origin` para permitir el acceso de CORS a la API; el encabezado de solicitud de entrada `x-amzn-RequestId` se asigna a `request-id` en la respuesta, la variable de ruta `petId` de la solicitud entrante se asigna al encabezado `request-path` de la respuesta y el parámetro de consulta `q` de la solicitud original se asigna al encabezado `request-query` de la respuesta.

1. En **Plantillas de respuesta**, mantenga `application/json` para **Tipo de contenido** e ingrese la siguiente plantilla de mapeo del cuerpo en el editor **Cuerpo de la plantilla**:

   ```
   {
        "message":"$context.error.messageString",
        "type": "$context.error.responseType",
        "statusCode": "'404'",
        "stage": "$context.stage",
        "resourcePath": "$context.resourcePath",
        "stageVariables.a": "$stageVariables.a"
   }
   ```

   Este ejemplo muestra cómo asignar las propiedades `$context` y `$stageVariables` a propiedades del cuerpo de la respuesta de gateway.

1. Seleccione **Save changes (Guardar cambios)**.

1. Implemente la API en una etapa nueva o existente.

Pruebe la respuesta de la puerta de enlace llamando al siguiente comando CURL si la URL de invocación del método de API correspondiente es `https://{{o81lxisefl}}.execute-api.us-east-1.amazonaws.com/custErr/pets/{petId}`:

```
curl -v -H 'x-amzn-RequestId:123344566' https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/5/type?q=1
```

Como el parámetro de cadena de consulta adicional `q=1` no es compatible con la API, se devuelve un error de la respuesta de puerta de enlace especificada. Debería obtener una respuesta de gateway similar a la siguiente:

```
> GET /custErr/pets/5?q=1 HTTP/1.1
Host: o81lxisefl.execute-api.us-east-1.amazonaws.com
User-Agent: curl/7.51.0
Accept: */*
 
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 334
Connection: keep-alive
Date: Tue, 02 May 2017 03:15:47 GMT
x-amzn-RequestId: 123344566
Access-Control-Allow-Origin: a.b.c
x-amzn-ErrorType: MissingAuthenticationTokenException
header-1: static
x-request-query: 1
x-request-path: 5
X-Cache: Error from cloudfront
Via: 1.1 441811a054e8d055b893175754efd0c3.cloudfront.net (CloudFront)
X-Amz-Cf-Id: nNDR-fX4csbRoAgtQJ16u0rTDz9FZWT-Mk93KgoxnfzDlTUh3flmzA==
 
{
     "message":"Missing Authentication Token",
     "type": MISSING_AUTHENTICATION_TOKEN,
     "statusCode": '404',
     "stage": custErr,
     "resourcePath": /pets/{petId},
     "stageVariables.a": a
}
```

En el ejemplo anterior se presupone que el backend de la API es [Pet Store](http://petstore-demo-endpoint.execute-api.com/petstore/pets) y que la API tiene un variable de etapa, `a`, definida.