2011-12-14 9 views
11

だから、「冪等は」と定義することができます、定義冪等

アクション行わN回は一度だけのアクションを実行するのと同じ効果を持っている場合に。

十分に簡単です。

私の質問は、この定義の微妙なことです。それは、それ自体で冪等子とみなされるアクションですか、またはアクションに渡されるデータも考慮する必要がありますか?

私は例を明確にしましょう:

は、私はいくつかのリソースを更新PUTメソッドを持っていると仮定し、我々は明らかにf(x)

それを呼び出すよ、f(3)がいる限り、私のように3を供給するよう、冪等であります入力。同様に明白な場合、f(5)はリソースの値を変更します(つまり、以前は3かそれ以前の値ではなくなります)。

したがって、冪等については、アクション/関数の一般化(つまり、f(x))、またはアクション/関数+それに渡されるデータ(つまり、f(3))を参照していますか?

+1

これは数学フォーラムに移動しないでください。 (すべての明確さのために:私はdownvoteをしなかった) –

+0

我々が正式な論理の定義、またはWebプログラミングの定義について話しているかどうかによって異なります。私はdownvoter(私ではない)はちょうど質問が病気であると思ったと思う。 –

+1

@Roy - それはRESTful Webサービスに直接適用されるので、私はその例を書いた文脈であると私は考えていません。 – Didaxis

答えて

5

私はいくつかのリソースを更新PUTメソッドを持って、我々はそれが f(x)が明らかに

、F(3)、冪等では、限り、私は、入力として3を供給して呼ぶことにします。また、 も同様に明白ですが、f(5)はリソースの値を変更します(つまり、 はもはや3になりません。

これは、サーバの実装がPUTがこの冪等のプロパティを尊重するようなものであることだけが明らかです。 RFC 2616 says HTTPの文脈では、:

方法はまた、N> 0 同じ リクエストの副作用がある(エラーや有効期限の問題は別に )という点で、「冪等」の性質を持つことができます1回のリクエストと同じです。ウェブのような分散システムで話題... オフビットを行く

、あなたはまた、可換性と同時要求を検討する必要があります。たとえば、同じPUT(x1)要求のN + 1は同じ効果があるはずですが、別のクライアントがあなたの間で別のPUT(x2)要求を行ったかどうかわからないので、n PUT(x1)= PUT (x1)およびm PUT(x2)= PUT(x2)の場合、2組の要求をインターリーブすることができる。

+0

このことから、この例では、PUTは単一の要求のコンテキストで冪等であると結論づけることができます。しかし、それが他の同時リクエストとインターリーブされている場合でも、最初の操作の結果が冪等のプロパティに従うので、それは依然として等冪です。 –

3

偶数性があると仮定しているのは、サーバーの状態が多くてもの一連の呼び出しによってに変更されることを意味します。ほとんどの場合、人々はこの用語を使用して、サーバの状態が何も変更されないことを意味します。何回でも呼び出すことができます。このような状況では、2つのケースの区別は重要ではありません。

+3

しかし、 「全く変化しない」は「無能力」です、そうですか?これはGET、HEAD、OPTIONS、TRACEとなるでしょう。 – Didaxis

5

等価性では、すべての値がf(f(x)) = f(x)(すべてx)の場合、そのアクションはドメイン上で保持される必要があります。それについて考えてみるもう一つの方法は、操作自体の構成がその操作であれば、操作は冪等であるということです。

+0

@JonathanM申し訳ありませんが、私はあなたの意見は表示されません。すべての 'x 'に対して、実数または複素数に対して' abs(x)= abs(x) 'を返します。 'abs 'が私の言ったことと一致しないと思うなら、反例を挙げてください。 –

3

これはidempotenceの定義ではありません。任意の項目x、f(f(x))== f(x)の場合、関数は冪等である。

PUTはf()関数の副作用であり、その結果ではありません。仮定

+0

あなたの定義は、ここに与えられているものに反する:http://en.wikipedia.org/wiki/Idempotence。このページは、偶数関数として 'abs()'を最初にサイトしますが、あなたの定義ではありません。 –

+0

これは単に間違っています。 idempotenceをidentity関数と同等に定義しました。あなたは暗黙のうちに操作がすでにxに対して行われていると仮定しています。 –

+0

はい、それは本当です、混乱のために申し訳ありません... – fge