ejemplo create amazon-web-services http-headers aws-lambda aws-api-gateway

amazon web services - create - Asignar mĂșltiples encabezados de respuesta http en AWS API Gateway con el cuerpo de respuesta de AWS Lambda



create api gateway lambda (2)

Esto no se debe a API Gateway o a múltiples encabezados. Tenga en cuenta que el encabezado de la ubicación se agregará a la respuesta solo para el redireccionamiento (3xx) o el proceso exitoso (2xx) de la solicitud. No se agregará cuando el código de retorno sea un error (4xx, 5xx), etc.

Más detalles aquí - https://en.wikipedia.org/wiki/HTTP_location

Esta es la razón por la que funcionó para context.succeed () y no funcionó para context.fail ().

Podría establecer un único encabezado de respuesta HTTP a través de la asignación de encabezado de respuesta de integración de puerta de enlace api .
en ese caso, estaba dando una respuesta context.fail("http://www.google.com") de aws lambda y uso regex (".http.") para identificar la respuesta y finalmente asignarla a mi encabezado como esta
Location: integration.response.body.errorMessage .
Esto funciona cuando trato de asignar un solo encabezado a la vez.
Pero quiero establecer encabezados de Ubicación y de Cookie en una sola respuesta . para lograr esto, devolví un json de mi aws lambda como

context.fail(JSON.stringify({Location:"http://www.google.com",Cookie: vid="233kwer34343"}))

pero no pude asignar encabezados a través de integration.response.body.errorMessage.Location e integration.response.body.errorMessage.Cookie

Es posible hacer esto usando context.succeed() lugar de context.fail() . pero esto no es verificar regex. Quiero comprobar Regex para categorizar las respuestas.

¿Cuál es la mejor manera de mapear múltiples encabezados de respuesta del cuerpo de respuesta lambda?


No creo que puedas hacer que esto funcione usando context.fail. El problema es que el parámetro pasado a context.fail es una cadena simple. Esa cadena se codifica en una cadena json y luego se pasa a API Gateway como un valor sting dentro de un atributo llamado "errorMessage".

El cuerpo de respuesta procedente de Lambda se ve más o menos así: {"errorMessage": "{/" Ubicación / ": /" http://www.google.com / ", /" Cookie / ": /" vid = ''233kwer34343 ''/ "}"}

Tenga en cuenta que el valor de errorMessage es una cadena con los caracteres especiales escapados, en lugar de un objeto json. No hay forma de decirle a un mapeo de encabezado que mire en integration.response.body.errorMessage, analice esa cadena en json y obtenga el atributo de ubicación del objeto json resultante.

Si devolviera los valores como un cuerpo de respuesta, en lugar de como encabezados, podría usar velocidad para analizar el contenido de errorMessage y transformarlos en el cuerpo de respuesta que desee. Desafortunadamente, las asignaciones de encabezado no tienen la potencia / flexibilidad de procesamiento completa de las plantillas de velocidad.

¿Por qué necesita llamar a context.fail en este caso?

Si llama a context.done, puede devolver json como el cuerpo como: {"Ubicación": " http://www.google.com ", "Cookie": "vid = ''233kwer34343''"}

Entonces las asignaciones de encabezado son solo integration.response.body.Location e integration.response.body.Cookie