リクエストがタイムアウトしたが、支払いは成功した:リトライセ... ノート

リクエストがタイムアウトしたが、支払いは成功した:リトライセーフなモバイルAPIの構築

モバイルネットワークは非常に信頼性が低いことで知られています。よくあるシナリオは、ユーザーがアプリで「今すぐ支払う」をタップしたときです。支払いリクエストはサーバーに到達し処理されますが、ネットワーク応答が電話に届きません。クライアントはリクエストが失敗したとみなし、再試行するため、二重に請求されることになります。これはまさに冪等性(べきとうせい)が解決するバグの一種です。冪等性とは、同じ操作を繰り返しても追加の効果がなく、2回目の試行は重複を認識して新しいことは何も行わないべきであることを意味します。実際には、モバイルエンジニアは、リクエストに一意の操作識別子を添付し、バックエンドでそれらを重複排除することにより、支払いAPIまたは注文APIを冪等として扱う必要があります。このアプローチにより、ネットワークが応答をドロップしたり、ユーザーがボタンをダブルタップしたりしても、ユーザーは一度だけ請求されます。