8

http応答ヘッダーをapiゲートウェイ統合レスポンスヘッダーマッピングに設定できます。私はAWSラムダからcontext.fail("http://www.google.com")応答を与え、正規表現を使用して、その場合の
(「.http。」)応答を識別し、最終的にこの
Location: integration.response.body.errorMessageように私のヘッダーにマッピングします。
これは、一度に1つのヘッダーをマップしようとすると機能します。
しかし、私はLocationとCookieヘッダーの両方を1つの応答で設定したいと考えています。 はこれを達成するために、私はAWS APIゲートウェイで複数のHTTP応答ヘッダーをAWSラムダ応答本体でマップする

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

のような私のAWSラムダからJSONを返されたが、私はcontext.succeed()代わりのcontext.fail()を使用してこれを行うことが可能ですintegration.response.body.errorMessage.Locationintegration.response.body.errorMessage.Cookie

を経由して、ヘッダーをマップできませんでした。これは正規表現をチェックしていません。私は応答を分類する正規表現をチェックしたい。

ラムダ応答本体から複数の応答ヘッダーをマップする最も良い方法は何ですか?

答えて

0

これは、APIゲートウェイまたは複数のヘッダーのためではありません。 Locationヘッダーは、リクエストのリダイレクト(3xx)または成功したプロセス(2xx)に対してのみレスポンスに追加されます。このリターンコードは、エラー(4xxの、5xxの)ときに追加されることはありませんなど、ここで

詳細 - https://en.wikipedia.org/wiki/HTTP_location

このことは()context.succeedのために働いた理由、それは文脈のために動作しませんでした。失敗します()。

+0

これはokey ..ですが、context.fail()メソッドで複数のヘッダをマッピングする方法を教えてください。それは任意のヘッダーかもしれません。場所のヘッダーではありません –

+0

可能かどうかわかりません。 context.fail()に送信したものがJSON値として追加されます。このように、{ "errorMessage": "{\"場所\ ":\" http://www.google.com \ "、\" Cookie \ ":\" 233kwer34343 \ "}" }このようなエラーメッセージを得ることができます - integration.response.body.errorMessage。深いJSON解析経験を持つ人が、これをさらに解析できるかどうかを明らかにすることができます。 –

+0

yaa ...それは問題です。私は "errorMessage"の内容を得ました。しかし、ここでは、integration.response.body.errorMessage.Locationやintegration.response.body.errorMessage.Cookieのように個々の値にアクセスするにはどうすればよいでしょうか。現在、それは起こっていません。 –

0

私はあなたがcontext.failを使ってこれを動作させることはできないと思います。問題は、context.failに渡されるパラメータが単純な文字列であることです。その後、その文字列はjson文字列にエンコードされ、「errorMessage」という名前の属性内のスティング値としてAPI Gatewayに渡されます。

ラムダから来たレスポンスボディは、{"errorMessage": "{\" Location \ ":\" http://www.google.com \ "、\" Cookie \ ":\" vid = '233kwer34343' "}

errorMessageの値は、j​​sonオブジェクトではなく特殊文字がエスケープされた文字列であることに注意してください。 integration.response.body.errorMessageを見て、その文字列をjsonに解析し、結果のjsonオブジェクトのlocation属性を取得するようにヘッダーマッピングを指示する方法はありません。

ヘッダーではなくレスポンス本文として値を返す場合は、velocityを使用してerrorMessageの内容を解析し、好きなレスポンス本文に変換することができます。残念なことに、ヘッダーマッピングには、速度テンプレートの完全な処理能力/柔軟性はありません。

この場合、なぜcontext.failを呼び出す必要がありますか? { "場所": "http://www.google.com"、 "クッキー": "VID = '233kwer34343'"}

が次にヘッダマッピングがちょうどあるあなたがcontext.doneを呼び出す場合

次のような体としてJSONを返すことができますintegration.response.body.Locationとintegration.response.body。Cookie

+0

答え: "なぜこの場合はcontext.failを呼び出す必要がありますか?" 私の基本的な必要性は、さまざまなユースケースで異なるヘッダーを設定することです。私はcontext.succeed()を使用すると、200,210などの複数の応答コードにマップできませんでした。正規表現チェックはそこで起こっていません。だから私はcontext.fail()を使用して複数のレスポンスコードをマップしようとしていて、それぞれのレスポンスコードで異なるヘッダをマップしようとしていたのです。 –

+0

レスポンスボディの正規表現をチェックし、特定の成功レスポンスコードに向ける方法はありますか?私は私のラムダ関数でcontext.succeed()を使用し、複数の成功応答コードを使用できますか? –

関連する問題