AWS API Gatewayでモックを作ってみよう


きっかけ

マネージャー「テストで必要だから外部APIのモックを作って。API Gatewayを使えば簡単だから。」
確かにAPI Gatewayの統合リクエストの統合タイプにMockって項目がある。
これならば簡単にできそうだ

API Gatewayでモックを作成

  1. Amazon API GatewayコンソールAPIの作成ボタンから新しいAPIを作成する
  2. API Gatewayが作られるのでアクションボタン > リソースの作成からAPIエンドポイントを設定する(必要に応じてCORSを有効にする)
  3. エンドポイントが作られるのでアクションボタン > メソッドの作成からメソッドを作成する
  4. メソッドのセットアップ画面で統合タイプ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ページ からお気軽にご連絡ください!

参考記事

teratail AWS API GatewayでHTTPリクエストのjsonを取得したい