Configurar una respuesta de gateway para una API REST mediante la consola de API Gateway - Amazon API Gateway

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
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. Elija una API de REST.

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

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

  5. 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.

  6. 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.

  7. 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.

  8. Elija Guardar cambios.

  9. 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 y que la API tiene un variable de etapa, a, definida.