如果您希望 API Gateway 充当模板渲染引擎,我认为这不会起作用,但您可以通过将 Accept 标头传递给您的 Lambda 让您的 Lambda 知道请求者正在寻找的内容类型,并让 Lambda 决定要做什么返回。
对于您想要支持的每个内容类型(请求者发送的数据),您都需要一个映射模板(在方法执行 -> 集成请求 -> 映射模板下)。
一个示例映射模板,它从请求中获取输入并将其转换为 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 Gateway - 在 Method Execution -> Method RESPONSE -> Add Response 下。模型可以为空,但将 Content-Type 设置为text/html
。这将告诉 API Gateway 让您从 Lambda 发回的任何内容传递给 Accept: text/html 的任何请求
编辑:这个答案假设您使用 Lambda 作为后端,但实际上相同的想法可以应用于您正在使用的几乎任何后端服务。