発展読了目安 30 分#決済#冪等性#Webhook#リトライ
「二重に引き落とされた」— 通知は1通しか届いていない
利用者は1回押した。請求は2件ある。ログには1件しか残っていない。5つの判断点で、あなたは何を選びますか。
このケースで問われること
このケースは、お金が絡む処理で、どこまでを「起きる前提」にするかを扱います。
二重決済は「バグを直せば起きなくなる」種類の問題ではありません。利用者は二度押しますし、ネットワークは切れますし、リトライは自動で走ります。起きることを前提に、起きても1回になる設計にするしかない。
そしてこのケースには、気づかれていない被害があります。7 件のうち問い合わせてきたのは 1 人です。残り 6 人にどう向き合うかは、技術の判断ではありません。
順に 5 つの判断点があります。それぞれで一度自分の答えを決めてから、先へ進んでください。結論を先に読むと、判断の練習になりません。
扱う範囲は api/idempotency・api/retry-timeout・api/async-queue・data/transaction-isolation にまたがります。
読み終わりましたか?
読了にすると、これを前提とする記事がロードマップで開放されます。