API Gateway をテンプレート レンダリング エンジンとして機能させたい場合、それはうまくいかないと思いますが、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')"
}
次に、ラムダで 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 に戻ります - メソッドの実行 -> メソッドの応答 -> 応答の追加。モデルは空にすることもできますが、Content-Type を に設定しtext/html
ます。これにより、Lambda から送り返されたものはすべて、Accept: text/html のすべてのリクエストに渡されるように API Gateway に指示されます。
編集: この回答は、Lambda をバックエンドとして使用していることを前提としていますが、実際には、使用しているほとんどすべてのバックエンド サービスに同じ考え方を適用できます。