APIgatewayとS3でRestAPIのスタブを作る

  • 3
    Like
  • 0
    Comment

背景

  • コーディング課題用にAPIを2本用意する必要があった
  • S3へのProxy程度なので、APIgatewayの勉強がてら実装

API

エンドポイント

  • GET /areas
  • GET /stores?region_number={地方を示す番号}
    • クエリ文字があるので、単にS3 Proxyでは不十分

構成図

infra.png

  • S3
    • jsonファイルを設置
  • API gateway
    • IAMでS3にReadOnlyのアクセス権を付与

S3内の物理ファイル配置

/areas/all.json
/stores/region/{region_number}.json

API gatawayの設定

GET areas は S3の /areas/all.json に固定でマッピング

areas_mapping.png

GET /stores は region_numberのクエリ文字列をパスにマッピング

stores_query.png

stores_mapping.png

両方のAPIともに文字コードはutf-8に設定

charset.png

実例

API gatewayのstage名 v1 としてデプロイした

  • GET /areas
    • https://cyc6gmq1i4.execute-api.ap-northeast-1.amazonaws.com/v1/areas
  • GET /stores
    • https://cyc6gmq1i4.execute-api.ap-northeast-1.amazonaws.com/v1/stores?region_number=3

所感

  • ドメイン名当てるのが面倒だった
    • USのAWSリージョンに証明書を置いておく必要がある
  • 変換ルールは単純なものだけ
    • 例えば、ヘッダに固定値を付ける
    • 例えば、クエリをパスに変換する (今回の実装)
  • 「このクエリがないとき〜」 のような条件判定には向かない
    • GET /stores の region_numberがクエリにないときは 本当はS3の /stores/all.json を返したかった
  • 複数のクエリが付くときには不向き
    • S3に用意するファイルが組み合わせ爆発する
    • offsetpage のクエリで、追加読み込みを模擬する程度が落とし所