虎の穴開発室ブログ

虎の穴ラボ株式会社所属のエンジニアが書く技術ブログです

MENU

AWS API Gatewayでスタブを作ってみる

f:id:toranoana-lab:20220228112746p:plain

こんにちは、虎の穴ラボのH.Y.です。

開発で、スタブが欲しくなるタイミングってありますよね。
でも、スタブを作るために、1から環境作って開発するのも、稼働環境を用意するのも手間なので、
いいサービスがないかなと調べていたら、AWS API Gatewayで簡単にできるとのことでした。
参考の記事を見る限り、環境構築も必要なくブラウザ上でできそうなので、作ってみることにしました。

参考: 【AWS】API Gatewayで超手軽にMockを作成する。

API Gatewayを作成する

まず、大本になるAPI Gatewayを作成します。
今回は、オンプレ環境から使えるようにするため、REST APIで構築します。 f:id:toranoana-lab:20220215115618p:plain

下のように設定します。API名はstubにしました。 f:id:toranoana-lab:20220215123342p:plain

mockでスタブを作る

今回は、下のようなスタブを作ります。

GET /item/{item_code}

レスポンスは、パスパラメータのitem_codeと固定値を返すスタブにします。

{
    "item_code": "{item_code}",
    "amount": 1
}

リソースの設定

まず、「/item/」部分を作ります。 アクションから、リソースの作成します。 f:id:toranoana-lab:20220215124253p:plain リソース名とリソースパスを入力して、リソースの作成をします。 f:id:toranoana-lab:20220215125712p:plain

「{item_code}」を作ります。 作り方は、「/item/」と同じ方法でリソースの作成から行います。

GET部分のメソッドの設定

下のようになったら、/{item_code}を選択した状態で、GETを選択します。 f:id:toranoana-lab:20220215131611p:plain

Mockを選びます。

f:id:toranoana-lab:20220215131951p:plain

レスポンスの中身を作る

総合レスポンスのリンクをクリックすると、レスポンスを編集できます。 f:id:toranoana-lab:20220215134509p:plain

マッピングテンプレートのapplication/jsonをクリックするとレスポンスが修正できます。 f:id:toranoana-lab:20220215135229p:plain

レスポンスの中身は、下の通りにしました。

{
    "item_code":"$input.params('item_code')" ,
    "amount":1
}

item_codeはパスパラメータの内容をそのまま、amontは1固定で返答するようにしました。

API Gatewayのmockで使えることができる変数は、AWS公式で調べられます。

API Gateway マッピングテンプレートとアクセスのログ記録の変数リファレンス - Amazon API Gateway

完成したら、テストボタンを押して、テストをおこないます。 f:id:toranoana-lab:20220215163721p:plain

このスタブの場合は、パスパラメータしか使用しないので、パスのところに入力して、テストボタンを押します。
そうすると、右側のレスポンス本文のところに、結果が表示されます。
f:id:toranoana-lab:20220215164242p:plain

エラーパターンも盛り込む

このままだけだと、成功パターンしか試せないので、特定のitem_codeを入れると失敗するように変更します。 VLTという言語を使用しているらしく、リファレンスをみると、if文が使えるようなので、特定のitem_codeの時エラーパターンの処理を追記します。

Apache Velocity Engine VTL Reference

総合リクエストのリンクを選択し、 f:id:toranoana-lab:20220215183055p:plain

application/jsonのリンクをクリックすると特定の条件の時に、httpステータスコードを変えることができます。 f:id:toranoana-lab:20220215183420p:plain

#set($itemCode = $input.params('item_code'))
#if($itemCode == "123")
{
    "statusCode": 404
}
#else
{
    "statusCode": 200
}
#end

item_codeが123の時は、404を返すようにします。

メソッドレスポンスに404の時の動作を設定します。 f:id:toranoana-lab:20220215184116p:plain

総合レスポンスに404の時のレスポンスを追加します。 f:id:toranoana-lab:20220215192501p:plain

application/jsonのマッピングテンプレートを追加し、下のように追加します。

{
    "message": "指定したアイテムは存在しません。"
}

設定後テストを行うと、ステータスとレスポンス本文がエラー用のメッセージになっていることがわかります。 f:id:toranoana-lab:20220215193423p:plain

デプロイ

このままだと、使えないのでデプロイして使える状態にします。 APIの選択状態から、APIのデプロイを選択します。 f:id:toranoana-lab:20220215171415p:plain

新しいステージを選択し、ステージ名を入力します。今回は、prodにしました。

f:id:toranoana-lab:20220215193851p:plain

デプロイが完了すると、APIのURLが生成されるので、これを元にAPIのアクセスします。 f:id:toranoana-lab:20220215194302p:plain

まとめ

以前まで、スタブ用にサーバを用意し、Java-Springや、RoRで作っていて、作るのも修正するのもかなりの手間がかかっていましたが API Gatewayでスタブを作った場合、サーバも用意する必要もなく、ブラウザ上で修正できるので、かなり簡単になります。

皆さんも、スタブを作る際は、 API Gatewayで作ってみてはいかがでしょうか。

P.S.

虎の穴ラボでは、私たちと一緒に新しいオタク向けサービスを作る仲間を募集しています。
詳しい採用情報は以下をご覧ください。
yumenosora.co.jp