API連携

API連携

執筆済 ソフトウェア開発

外部のサーバとデータをやり取りする。

基本の流れ#

リクエスト組み立て → 送信 → 待つ → 応答の検証 → 変換 → 反映
                      ↓
                    失敗しうる(すべての段階で)

失敗の種類#

種類 対処
ネットワーク不通 再試行、オフライン表示
タイムアウト 再試行、上限を設ける
4xx(クライアント誤り) 再試行しない。修正が必要
5xx(サーバ誤り) 指数バックオフで再試行
429(レート制限) Retry-After に従う
形式が違う 検証して落とす。想定外を通さない

再試行してよいのは冪等な操作だけ。 POST の再送は二重登録を起こしうるので、 冪等キーをサーバに渡す設計が要る。

指数バックオフ#

待ち時間=min(base×2n,max)+jitter

ジッタ(乱数のゆらぎ)が重要で、 これが無いと全クライアントが同時に再試行して サーバをさらに落とす(thundering herd)。

型の境界#

外から来る JSON は信用できない

JSON(未知) → 検証・変換 → 自分の型(信用できる)

この境界を 1 か所に集めておくと、 API の変更に強くなる。 Swift の Codable、TypeScript の zod などが担う役割。

参考文献#

ノート一覧を閉じる