Learn VisualLearn API

同じキーなら、繰り返し送っても1回しか実行されない

POSTは、それだけでは冪等ではありません。同じPOSTを2回送ると、通常は2つのリソースができてしまいます。

冪等性キーは、この問題を解決します。クライアントは、一意のキーを作り、リクエストに添えます。サーバーは、あるキーで最初に受け取ったリクエストの結果を保存します。同じキーが再び届いたとき、サーバーは、リクエストをもう一度処理する代わりに、保存しておいた結果を返します。

タイムアウトの後にクライアントが再試行したり、ネットワークの都合でリクエストが重複したりすることがあります。サーバーがキーを覚えているため、クライアントの「この1回の試み」という意図は、再試行をまたいで保たれ、安全ではなかった繰り返しが安全になります。

この課の目標

冪等性キーが、重複したPOSTによる二重作成をどう防ぐかを説明できる。すでに処理済みのキーをサーバーが受け取ったときに何をするか説明できる。

クライアントがIdempotency-Key: "abc"を付けてPOST /ordersを送り、レスポンスを待つ間にタイムアウトし、まったく同じキーで再試行した。実は最初のリクエストはサーバー側で成功していた。何が起きる?