#きっかけ
マネージャー「テストで必要だから外部APIのモックを作って。API Gatewayを使えば簡単だから。」
確かにAPI Gatewayの統合リクエストの統合タイプにMock
って項目がある。
これならば簡単にできそうだ
#API Gatewayでモックを作成
-
Amazon API Gatewayコンソールで
APIの作成
ボタンから新しいAPIを作成する - API Gatewayが作られるので
アクション
ボタン >リソースの作成
からAPIエンドポイントを設定する(必要に応じてCORSを有効にする) - エンドポイントが作られるので
アクション
ボタン >メソッドの作成
からメソッドを作成する - メソッドのセットアップ画面で
統合タイプ
をMock
にする
##ステータス200で返したい場合
- 統合リクエストのマッピングテンプレート(Content-Type application/json)を下記にする(初期値のまま)
{"statusCode": 200}
- 統合レスポンスのメソッドレスポンスのステータスが200のマッピングテンプレートに返したい値を設定する
##ステータス400で返したい場合
- 統合リクエストのマッピングテンプレート(Content-Type application/json)を下記にする
{"statusCode": 400}
- メソッドレスポンスの
レスポンスの追加
から400を追加する - 統合レスポンスの
統合レスポンスの追加
から以下の設定をする- HTTPステータスの正規表現:400(統合リクエストの値を正規表現で指定できる)
- メソッドレスポンスのステータス:400(メソッドレスポンスで追加したステータス)
- ステータスが400のマッピングテンプレートに返したい値を設定する
#テストとデプロイ
設定が終わったらメソッドの実行画面のテストからメソッドのテストをしてみましょう。
テスト画面でURLクエリパラメータやPOSTのリクエスト本文の設定も可能です。
テストで問題がなければ、アクション
ボタン > APIのデプロイ
からデプロイしましょう。
デプロイをするとステージエディター画面に遷移し、呼び出しのURLが表示されます。
呼び出しのURL + 設定したリソース
でAPIにアクセスできるようになります。
APIの設定を変えた時もAPIのデプロイを忘れずに!
(何度かデプロイを忘れて、おかしい..動かない...となりました )
#クエリパラメータを取得
$input.params("パラメータ名")
でクエリパラメータを取得できます。
統合リクエストのマッピングテンプレートで以下のように設定するとクエリパラメータでステータスコードを分岐させられます。
#if($input.params("debug") == "200")
{"statusCode": 200}
#elseif($input.params("debug") == "400")
{"statusCode": 400}
#else
{"statusCode": 500}
#end
##コメントを書く場合は先頭に「#」を2個
#まとめ
これでモックはバッチリ!
と思ったら、あれれ・・・POSTのリクエストデータが取れない!?
色々調べてみると、統合タイプ:Mock
ではデータ取得ができないらしい...
(参考:teratail AWS API GatewayでHTTPリクエストのjsonを取得したい)
・・・・仕方ないのでMockはやめて、Lambda関数で作ることにします。
が、長くなるのでLambdaの話は次回に。
#プチ連載
1回目 AWS API Gatewayでモックを作ってみよう(本記事)
2回目 AWS API Gateway + Lambda (Python) でモックを作ってみよう
3回目 Slack + Lambda (Python) でAWS API Gatewayモックを作ってみよう
#We're hiring!
AIチャットボットを開発しています。
ご興味ある方は Wantedlyページ からお気軽にご連絡ください!