TT Lab
はじめる
学ぶ 学習パス コース

統合とデプロイ

ドキュメントの薄いAPIに繋ぐ

TT Labで続きを見る

目標

ドキュメントが不十分な顧客企業のAPIに接続して、仕様にない事実まで全件調査で確認し、リトライまで処理できるようになります。

なぜ重要なのか

新しいAPIに接続するときの最初の作業は、コードを書くことではなく、全件調査です。すべてのページを1回回りながら、総件数、合計、各フィールドの欠損件数を数えてみます。この1回が、その後の数週間のデバッグをなくします。「全60件のうち6件はregionが空です。これらをどう処理しますか」を最初の週に尋ねれば、あとで地域別の合計が合わないという報告が来ません。

ページネーションで最もよくあるバグは、totalでページ数を計算しながら割り算の余りを忘れることです。最後のページがまるごと抜け、その事実は、合計がわずかに小さいという形でしか現れないので、発見が遅れます。そのため、ステップ4では、計算値を信じず、実際に回って数えて検証します。

リトライでは、対象の区別が重要です。5xxとネットワークエラーは一時的なことがあるのでリトライの対象ですが、4xxは、リクエストを直さない限り何度送っても同じ結果なので、リトライは負荷を上げるだけです。

API仕様(Wikiに書かれたすべて)

ステップ

  1. /opt/app/api.pyを実行して、127.0.0.1:8002/healthが200を返すようにしてください。
  2. /metaのversionの値を、/root/api/version.txtに書いてください。
  3. 全ページ数を計算して、/root/api/pages.txtに書いてください。
  4. すべてのページを実際に回って収集したレコードの総数を、/root/api/count.txtに書いてください。
  5. すべてのレコードのamountの合計を、/root/api/sum.txtに書いてください。
  6. regionが空文字列のレコード数を、/root/api/no_region.txtに書いてください。
  7. /flakyをリトライして、最終的に受け取れたステータスコードを、/root/api/flaky_ok.txtに書いてください。
  8. /root/api/report.mdに、バージョン、総件数、金額の合計をまとめてください。

参考

注文APIを起動する

/opt/app/api.pyを実行して、127.0.0.1:8002/healthが200を返すようにしてください。

/opt/app/api.pyを実行すると、127.0.0.1:8002で待ち受けます。/healthで確認してください。

APIのバージョンを確認する

/metaのversionの値を/root/api/version.txtに書いてください。

/metaのレスポンスはJSONです。versionフィールドの値だけを取り出してください。jqやpython3を使うと楽です。

全ページ数を計算する

全ページ数を計算して/root/api/pages.txtに書いてください。

/metaのtotalとpage_sizeで計算します。余りがあれば、ページがもう1つあります。

全ページを回って件数を数える

すべてのページを実際に回って収集したレコードの総数を、/root/api/count.txtに書いてください。

実際にすべてのページを回って、itemsを数えてください。totalフィールドをそのまま写さず、検証することが要点です。

金額の合計を求める

すべてのレコードのamountの合計を/root/api/sum.txtに書いてください。

すべてのページのitemsから、amountを足します。

欠損レコードを数える

regionが空文字列のレコード数を/root/api/no_region.txtに書いてください。

ドキュメントにない欠損です。regionが空文字列のレコードが何件かを数えてください。

不安定なエンドポイントを通過する

/flakyをリトライして、最終的に受け取れたステータスコードを/root/api/flaky_ok.txtに書いてください。

/flakyは、最初の数回は503を返します。200が来るまでリトライして、最終的なステータスコードを書いてください。

連携結果の報告書を書く

/root/api/report.mdに、バージョン、総件数、金額の合計をまとめてください。

バージョン、総件数、金額の合計がすべて入っている必要があります。最初の週に顧客に送る文書だと考えてください。