0

リクエストの HTTP Accept ヘッダーに基づいてさまざまなドキュメントを返すように Amazon AWS API Gateway をセットアップする方法を説明していただけますか?

2 つの例:

4

1 に答える 1

1

API Gateway をテンプレート レンダリング エンジンとして機能させたい場合、それはうまくいかないと思いますが、Accept ヘッダーを Lambda に渡すことで、リクエスタが探しているコンテンツ タイプを Lambda に知らせ、Lambda に何をすべきかを決定させることができます。戻る。

サポートしたい Content-Type (リクエスタが送信するデータ) ごとに、マッピング テンプレート ([メソッドの実行] -> [統合リクエスト] -> [マッピング テンプレート] の下) が必要になります。

リクエストから入力を受け取り、それを JSON に変換してeventLambda が操作できるようにするサンプル マッピング テンプレート:

{
  "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 をバックエンドとして使用していることを前提としていますが、実際には、使用しているほとんどすべてのバックエンド サービスに同じ考え方を適用できます。

于 2015-11-24T18:58:45.177 に答える