AWS API Gateway と Lambda 関数 (python) を統合タイプとして使用して、適切な http ステータス コードとエラー メッセージを設定する方法を理解するのに苦労しています。
私は簡単な例で作業しています。詳細は次のとおりです。
ラムダ関数
def lambda_handler(event, context):
return_json = {}
if event["request-number"] == "":
raise Exception("Error request-number can't be empty")
elif event["request-number"] == "3":
raise Exception("Value not accepted")
else:
return_json = {"service-activated": "TRUE"}
return return_json
API /resourcetest POST
これは上記のラムダと統合されています。
目標: HTTP 400 と、メッセージError request-number can't be empty when request-number = "" を含む本文を返します。
実装:
- 新しいメソッド レスポンス 400 を作成しました
- ラムダ Error Regex では、Error.* をマッピングしたので、その文字列をキャッチします
ボディ マッピング テンプレート: コンテンツ タイプを application/json として作成し、テンプレートとして使用しました (設定前にハッシュタグ記号がありますが、このページの書式設定が台無しになるため、省略しました):
set($inputRoot = $input.path('$')) { "メッセージ" : $input.json('$.errorMessage') }
メソッドの応答に http ステータス 400 があることを確認しました (そして、私はそれを持っています)。
テスト AWS API Gateway コンソールを使用して、HTTP 400 とメッセージError request-number can't be empty in the body があることをテストしました。良い私は私が望んでいたことを達成しました:
Postman と Chrome プラグイン Restlet Client でもテストすることにしましたが、http ステータス 200 とエラー メッセージが適切にフォーマットされていません。
さて、これは非常に奇妙です: AWS API コンソールからはすべてがうまく機能し、外部サービスからは何も期待どおりに機能しません。
誰かが似たようなことに対処しなければなりませんでしたか?
ありがとう!