定义幂等

Did*_*xis 11 rest web-services http http-verbs idempotent

所以"幂等"可以定义为:

如果执行N次的动作与仅执行一次动作具有相同的效果.

明白了,很容易.

我的问题是关于这个定义的微妙之处 - 这个行为本身就被认为是幂等的,还是你还必须考虑传递给行动的数据?

让我用一个例子来澄清:

假设我有一个更新某些资源的PUT方法,我们称之为 f(x)

显然,f(3)只要我提供3作为输入,就是幂等的.同样显而易见的是,f(5)将改变资源的价值(即,它将不再是3或以前的任何值)

所以当我们谈论幂等性时,我们是指动作/函数的概括(如,f(x)),还是我们指的是动作/函数+传递给它的数据(即f(3))?

Mic*_*ber 5

幂等要求的动作适用于在其领域,即所有的值,f(f(x)) = f(x)对所有x.考虑它的另一种方式是,如果操作的组成仅仅是操作,则操作是幂等的.


Bru*_*uno 5

假设我有一个更新某些资源的PUT方法,我们称之为f(x)

显然,f(3)是幂等的,只要我提供3作为输入.同样显而易见的是,f(5)将改变资源的价值(即,它将不再是3或之前的任何值).

这显然是服务器实现是PUT尊重这个幂等属性.在HTTP环境中,RFC 2616说:

方法也可以具有"幂等"的属性(除了错误或到期问题)N> 0个相同 请求的副作用单个请求相同.

稍微偏离主题......在像web这样的分布式系统中,您可能还需要考虑交换性和并发请求.例如,相同PUT(x1)请求的N + 1应具有相同的效果,但您不知道另一个客户端是否在您的之间发出了不同的PUT(x2)请求,因此当n PUT(x1)= PUT时( x1)和m PUT(x2)= PUT(x2),两组请求可以交错.