根据Amazon AWS API Gateway上的Accept标头参数返回不同的MIME类型

时间:2015-11-21 14:11:40

标签: aws-api-gateway http-accept-header

您能否解释如何设置Amazon AWS API Gateway以根据请求HTTP Accept标头返回不同的文档?

两个例子:

1 个答案:

答案 0 :(得分:1)

如果您希望API网关充当模板呈现引擎,我认为这不会起作用,但您可以通过将Accept标头传递给Lambda并让Lambda知道您的Lambda知道请求者正在寻找哪种内容类型决定返回什么。

对于要支持的每个Content-Type(请求者正在发送的数据),您将需要一个映射模板(在方法执行 - >集成请求 - >映射模板下)。

一个示例映射模板,它接收来自请求的输入并将其转换为JSON event,以便Lambda可以使用它:

{
  "headers": {
    // maybe there is an easier way for Lambda to get this but I couldn't find it in the context object so I believe APIG needs to send it like this
    "Accept": "$input.params('Accept')"
  },
  "message": "$input.params('message')"
}

然后在你的lambda中你可以检查Accept标头并根据它发回一个响应:

module.exports.handler = function(event, context) {
    var msg = event.message.toUpperCase()

    if(event.headers.Accept === 'text/html') {
      return context.succeed('<html><body><h1>Transformed Message: ' + msg + '</h1></body></html>');
    }
    // all other requests get JSON...
    context.succeed({transformedMessage: msg});
};

最后一步回到API网关 - 在方法执行下 - &gt;方法响应 - &gt;添加响应。模型可以为空,但将Content-Type设置为text/html。这将告诉API网关让您从Lambda发回的任何内容传递给任何Accept:text / html

的请求

编辑:这个答案假设您使用Lambda作为后端,但实际上同样的想法可以应用于您正在使用的几乎任何后端服务。