Closed5
POST を冪等にする仕組みについて調べる
POST は冪等ではないが、決済などの冪等性が保証されていて欲しいユースケースが存在する。このようなユースケースのために、Idempotency-Keyヘッダのという仕様が提案されている。これについて、少し資料を読みたい。
クライアントはサーバー側の要求通りに毎回 unique なキーを header に付与してリクエストするだけみたいだ。サーバー側は、色々細かい処理が必要になる。
- key のユニーク性の検証 (key の使い回しは 422, key がそもそもない場合は400)
- key の有効期限の検証
- 最初のリクエストが終わる前に次のリクエストが来たら 409 を返す
key は有効期限があるので、半永続化する必要がある。RDB での保存例は次のスライドがわかりやすい。
キーの保存と他の処理が atomic でないといけないのは、なるほどなー
リトライの話で、Exponential Backoff が紹介されていた。Exponential Backoff とは、時間を指数的に増加させながらリトライする手法のこと。一定間隔のリトライと比較して、サーバーへの負荷を減らすことができる。
キーの保存と他の処理が atomic でないといけないのは、なるほどなー
こういうのほかの処理が別サービスになると分散トランザクションになるよなー
今の副業でも分散トランザクション考えなくていいのかみたいなことを思うことも多いんだけど、分散トランザクションの方法について少しみてみる。Saga パターンを聞いたことがあるので、それをまず調べてみる。
ここら辺が参考になった
この記事もよかった
APIを冪等をすることで、リトライさらには分散トランザクションをシンプルにできるという話
このスクラップは2024/07/16にクローズされました