API呼び出し:処理を減らし再試行を制御する

要点

効率のよいAPI利用では、データの鮮度と正しさを保ちながら不要な通信を減らします。呼び出し回数、転送量、待ち時間は別々に測定します。

サーバーとネットワーク設備の無人セキュア通路
この記事の内容

同じ利用経路を比較する

十進キロバイトによる架空例です。最初は100回の呼び出しで各100 kB、変更案は20回で各50 kBとします。転送量は10000から1000 kBへ90 %減ります。ただし、遅延も同じ割合で減るとはいえません。計算対象は応答本文だけで、リクエストやヘッダーは含みません。

架空の測定項目変更前変更案
呼び出し回数10020
応答あたりの転送量100 kB50 kB
総転送量10000 kB1000 kB
経路全体の時間実測が必要実測が必要

並列化の前に処理を減らす

  • 必要な項目だけ取得し、仕様に沿ってページをたどります。一括処理には上限と部分成功の扱いが必要です。ページを大きくしても速くなるとは限りません。
  • 文脈と鮮度の条件を満たす接続や応答は再利用します。同時実行数を制限し、サーバー処理と待ち行列も測定します。
  • 全体の期限と試行回数の上限を決めます。一時障害の再試行にはランダムな待機を加え、複数の層が重ねて再試行していないか確認します。

完了済みの操作を繰り返さない

クライアントのタイムアウトは、サーバー側の取り消しを証明しません。作成や支払いを再実行する前に、状態と提供側の冪等性の仕組みを確認します。実際に近い負荷で、経路全体の時間、エラー、データの正しさを比較します。

一次資料

1つのAPIレスポンスの背後にある処理を検査する。

1つのGraphQLクエリが多数のダウンストリーム呼び出しをトリガーする可能性がある。クライアントから見えるレイテンシは、リゾルバー、リスト、およびトラバースされたリレーションシップのコストを隠蔽する可能性がある。

  • クライアントからダウンストリームサービスへの操作をトレースする。
  • フィールドコストと実際に有効なボリュームを比較する。
  • キャッシュ前にリストと繰り返しクエリをバインドする。

一次資料:OWASP — GraphQL Cheat Sheet. 関連する方法:実践ガイドを読む.

Retry-After:待機・予算・再試行判断

この言語版の詳しい参照メモは英語で提供しています。

Reducing API calls includes controlling repetition

An API optimisation should count attempts reaching the dependency rather than only requests initiated by the screen.

  • Trace SDK and proxy retries under one logical identifier.
  • Avoid shortening server instructions merely to fit a budget.
  • Verify an uncertain write’s state before creating a new intention.

Explore Retry-After and the retry model →

References reviewed · RFC 9110 · §9.2.2, §10.2.3 · RFC 6585 · §4 · AWS