Configurar una respuesta de gateway para una API REST mediante la consola de API Gateway
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
Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway
. Elija una API de REST.
-
En el panel de navegación principal, elija Respuestas de puerta de enlace.
-
Elija un tipo de respuesta y, a continuación, elija Editar. En este tutorial, utilizamos Falta el token de autenticación como ejemplo.
-
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
) a404
, 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. -
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 encabezadoAllow-Control-Allow-Origin
para permitir el acceso de CORS a la API; el encabezado de solicitud de entradax-amzn-RequestId
se asigna arequest-id
en la respuesta, la variable de rutapetId
de la solicitud entrante se asigna al encabezadorequest-path
de la respuesta y el parámetro de consultaq
de la solicitud original se asigna al encabezadorequest-query
de la respuesta. -
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. -
Elija Guardar cambios.
-
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 Storea
, definida.