Webhook の冪等化は処理成功後に確定する
API設計
冪等性
知識
判断
Webhook の二重処理を防ごうとして、受信直後に event ID を「既処理」として記録してから本体処理を走らせると、本体が失敗したときに送信元の再送が効かなくなる(再送は「処理済み」として即 2xx で返され、イベントは永久に取りこぼされる)。
対処
- 本体処理が失敗したら冪等キーの記録を削除し、同一 event ID の再送を有効に戻す。冪等の確定は成功後に行う。
- 本来何もしないと決めているイベント種別は、「終端的に no-op」であることをテストで示しておく。未実装と意図的 no-op を区別できないと、後から読んでもこの分岐が正しいのか判断できない。
残余リスク
処理中のイベントに対して早すぎる再送が来ると、その再送は duplicate として 2xx になり、その後元の処理が失敗する狭い窓が残る。この窓を残余リスクとして明記し、監視から event ID の運用再送へつなげる契約を置く。コードだけで閉じようとするとロックの範囲が広がるので、検知で守る側に倒す判断もある。