Skip to content
Latchkey

冪等なリクエストとは何か? 繰り返しても安全

冪等なリクエストとは、何回送っても同じ最終状態を生むリクエストであり、失敗の後にretryしても安全で、重複を引き起こしません。

ネットワークは予測不能に失敗するため、retryは不可欠ですが、retryはリクエストの繰り返しが害を及ぼさない場合にのみ安全です。冪等性がその性質です。1回送っても5回送っても結果は同一です。どのリクエストが冪等かを理解すると、瞬断の後にpipelineが安全にretryできるのはどれかがわかります。

同じ結果、多くの送信

冪等な操作は、1回適用しても繰り返し適用してもシステムを同じ状態に残します。値をXに設定するのは冪等ですが、1ずつ増やすのは冪等ではありません。

どのHTTPメソッドが該当するか

  • GET、PUT、DELETEは冪等と定義されています。
  • POSTは一般に冪等ではありません。
  • idempotency keyはPOSTをretryに対して安全にできます。

なぜretryにとって重要か

timeoutの後、リクエストが実際に完了したかどうかを判断できないことがしばしばあります。それが冪等なら、重複した課金や重複したデプロイのような効果を二重にする心配なく、単にretryできます。

idempotency key

冪等でない操作について、APIはidempotency keyを受け付けて、サーバーが繰り返しを認識し効果を一度だけ適用します。これにより、本来は安全でないPOSTがretry可能になります。

CI/CDにおける冪等性

デプロイのステップを冪等になるよう設計すると、再実行が重複したreleaseやリソースを作りません。宣言的なツールは、同じ望ましい状態を2回適用するのが自然に冪等であるため役立ちます。

安全な自動retry

retryはリクエストが冪等なときにのみ役立つため、自動retryのロジックは冪等な操作を対象にします。Latchkeyのrunnerは一般的なエンドポイントへの冪等なリクエストの一時的な失敗を自動でretryし、安全でない操作はあなたが守れるよう残します。

重要なポイント

  • 冪等なリクエストは、1回送っても何回送っても同じ状態を生みます。
  • GET、PUT、DELETEは冪等ですが、POSTは安全にするためにidempotency keyが必要です。
  • 冪等性こそが、ネットワークの瞬断の後のretryを安全にするものです。

関連ガイド