idempotent

冪等 (HTTP)

[2] HTTP において冪等 (べきとう) (idempotent) とは、 同じ要求を何度繰り返し実行しても結果が同じであることを言います。

仕様書

定義

[12] 要求メソッドは、同じ要求を複数行っても、一度だけ行っても、 において同じ効果となることが意図されているなら、 冪等 (idempotent) です。 >>10

[15] ただしこれは利用者が何を要求しているかを表す性質ですから、 実際にで何が行われるかは別の問題となります。 >>10

[16] 例えばアクセスログに毎回記録しても構いませんし、 変更履歴を残すなど副作用があっても構いません。 >>10

処理モデル

[17] 冪等メソッドについては、クライアント応答を読む前に通信エラーがあったとしても、 要求を自動的に再実行できます。 >>10

冪等なメソッドの一覧

[11] 次のメソッドは、冪等です。

[19] 要求メソッドIANA に登録する際に、冪等か否かも記載することになっています >>18

副作用ある操作の冪等性

[21] StripeWeb API は、 独自の Idempotency-Key: ヘッダーを使って、 POST 操作の冪等性要求の送信舎が制御できるようにしています。

歴史

[1] RFC 2068・2616 (HTTP/1.1) 9.1.2 Idempotent Methods

Methods may can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request. The methods GET, HEAD, PUT and DELETE share this property. Also, the methods OPTIONS and TRACE SHOULD NOT have side effects, and so are inherently idempotent.

メソッド冪等 (べきとう) という特性も持つことがあります。 これは、 (誤り満期の問題は別として) 同じ要求N > 0 回行った時の副作用が1回の要求に対する副作用と同じであることを表します。 メソッド GET, HEAD, PUT, DELETE はこの特性を持ちます。 また、 OPTIONS メソッドTRACE メソッド副作用を持つべきではありませんから、元々冪等です。

和訳者注: べきなのですから、 副作用を持って冪等性が成り立たなくても一応適合するはずで、 元々冪等というのは言葉が過ぎてはいませんでしょうか。

However, it is possible that a sequence of several requests is non-idempotent, even if all of the methods executed in that sequence are idempotent. (A sequence is idempotent if a single execution of the entire sequence always yields a result that is not changed by a reexecution of all, or part, of that sequence.) For example, a sequence is non-idempotent if its result depends on a value that is later modified in the same sequence.

しかし、単独ではすべて冪等メソッドの列が冪等ではないこともあります。 (ある列が冪等であるとは、 その列を一度実行して得られる結果がその列の一部又は全部を再実行しても変わらないことをいいます。) 例えば、結果が同じ列の後の方で修正される値に依存している場合、 その列は冪等ではありません。

A sequence that never has side effects is idempotent, by definition (provided that no concurrent operations are being executed on the same set of resources).

副作用を決して持たない列は、 (同じ資源集合に対して並行して操作が行われないならば) 定義より冪等です。

関連

[3] 安全なメソッドと似ていますが、冪等であるからといって安全とは限りません。

[13] 逆に安全なメソッドは、すべて冪等です >>10

[14] 将来にわたってこの性質が保証されるのかは不明です。

[20] 冪等なメソッドであっても、間で他の操作が行われれば、結果は異なったものとなるかもしれません。