首页 文章

使用AWS Lambda响应正文在AWS API Gateway中映射多个http响应标头

提问于
浏览
8

我可以通过 api gateway 集成响应头映射设置单个 http 响应头 .
在那种情况下,我从 aws lambda 给出 context.fail("http://www.google.com") 响应,并使用正则表达式(".http.")来识别响应,最后将其映射到我的 Headers ,就像这样
Location: integration.response.body.errorMessage .
当我尝试一次映射一个 Headers 时,这是有效的 .
But i want to set both Location and Cookie headers in a single response . 实现这一点,我从我的aws lambda返回了一个json

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

但我无法通过 integration.response.body.errorMessage.Locationintegration.response.body.errorMessage.Cookie 映射 Headers

可以使用 context.succeed() 而不是 context.fail() 来执行此操作 . 但这不是检查正则表达式 . 我想检查正则表达式对响应进行分类 .

从lambda响应体映射多个响应头的最佳方法是什么?

2 回答

  • 0

    这不是因为API网关或多个标头 . 请注意,Location头将仅添加到响应中,仅用于请求的重定向(3xx)或成功过程(2xx) . 返回代码错误(4xx,5xx)等时不会添加 .

    更多细节 - https://en.wikipedia.org/wiki/HTTP_location

    这就是为什么它适用于context.succeed()并且它不适用于context.fail()的原因 .

  • 0

    我不认为你可以使用context.fail使这个工作 . 问题是传递给context.fail的参数是一个简单的字符串 . 然后将该字符串编码为json字符串,然后作为名为“errorMessage”的属性中的sting值传递给API Gateway .

    来自Lambda的响应主体看起来像这样:{"errorMessage":"{" Location \ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    请注意,errorMessage的值是一个字符串,其中包含特殊字符转义,而不是json对象 . 没有办法告诉 Headers 映射在integration.response.body.errorMessage中查找,将该字符串解析为json,并获取生成的json对象的location属性 .

    如果您将值作为响应主体而不是 Headers 返回,那么您可以使用velocity来解析errorMessage的内容并将它们转换为您喜欢的任何响应主体 . 遗憾的是, Headers 映射不具有速度模板的全部处理能力/灵活性 .

    在这种情况下,为什么需要调用context.fail?

    如果你调用context.done,你可以返回json作为正文:{"Location":“http://www.google.com "," Cookie ": " vid = '233kwer34343'”}

    然后 Headers 映射只是integration.response.body.Location和integration.response.body.Cookie

相关问题