--- title: Idempotent (べき等) slug: Glossary/Idempotent tags: - Glossary - HTTP - WebMechanics translation_of: Glossary/Idempotent ---

ある HTTP メソッドがべき等であるとは、サーバーが同じ状況にあるとき、特定のリクエストに対して何回でも続けて同じ効果が起こることをいいます。 このことは、べき等なメソッドでは副作用が生じるはずではないと言うこともできます ( 記録などを除く ) 。 適切に実装された {{HTTPMethod("GET")}} メソッド、{{HTTPMethod("HEAD")}} メソッド 、{{HTTPMethod("PUT")}} メソッド、 {{HTTPMethod("DELETE")}} メソッドはべき等ですが、 {{HTTPMethod("POST")}} メソッドはそうではありません。 {{Glossary("Safe", "安全な")}}メソッドはすべてべき等です。

べき等であるためには、サーバーにおける裏側の実際の状態だけが考慮されるので、返される状態コードはリクエストごとに異なる場合があります。 例えば、最初に {{HTTPMethod("DELETE")}} メソッドが呼び出された場合は、おそらく {{HTTPStatus("200")}} を返しますが、それ以降は {{HTTPStatus("404")}} を返すでしょう。 RESTful な API の設計において、最後の入力操作を削除する機能を DELETE メソッドを使って実装すべきでないとされるのも、{{HTTPMethod("DELETE")}} メソッドがべき等であることを示唆しています。

なお、メソッドがべき等であっても、サーバーやアプリケーションによってべき等性の破壊が生じることがあります。

例えば、 GET /pageX HTTP/1.1 はべき等です。 連続して何度か呼び出しても、クライアントは同じ結果を得ます。

GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1

POST /add_row HTTP/1.1 はべき等ではありません。 何度か呼び出すと、その回数だけ列に追加されていきます。

POST /add_row HTTP/1.1
POST /add_row HTTP/1.1   -> 2行目に追加
POST /add_row HTTP/1.1   -> 3行目に追加

DELETE /idX/delete HTTP/1.1 はべき等ですが、状態コードは数回のリクエストの間に変化することがあります。

DELETE /idX/delete HTTP/1.1   -> idX が存在する場合は 200 を返却
DELETE /idX/delete HTTP/1.1   -> ちょうど削除されたので 404 を返却
DELETE /idX/delete HTTP/1.1   -> 404 を返却

詳細情報

一般知識

技術情報