所以“幂等性”可以定义为:
一个动作,如果执行N次,与只执行一次动作的效果相同。
明白了,很简单。
我的问题是关于这个定义的微妙之处,-is操作本身被认为是幂等的,或者您是否也必须考虑传递到操作中的数据?
让我举个例子来说明一下:
假设我有一个更新资源的PUT方法,我们称它为f(x)
显然,只要我提供3作为输入,f(3)就是幂等的。同样明显的是,f(5)将更改资源的值(即,它将不再是3或以前的值)
那么,当我们谈论幂等时,我们是指动作/函数的泛化(例如,f(x)),还是指动作/函数+传递给它的数据(即,f(3))?
发布于 2011-12-14 22:27:01
假设我有一个更新资源的
方法,我们称它为f(x)
显然,f(3)是幂等的,只要我提供3作为输入。同样明显的是,f(5)将改变资源的值(即,它将不再是3或以前的值)。
这一点很明显,因为服务器实现是这样的:PUT遵守这个幂等属性。在超文本传输协议的上下文中,RFC 2616 says
方法还可以具有“幂等性”属性,因为(除了错误或过期问题之外)N>0个相同的请求的副作用与单个请求相同。
有点离题了.在像web这样的分布式系统中,您可能还需要考虑交换性和并发请求。例如,同一个PUT(x1)请求的N+1应该具有相同的效果,但是您不知道是否另一个客户端在您的请求之间发出了不同的PUT(x2)请求,因此当n_PUT(x1)=PUT(x1)和m_PUT(x2)=PUT(x2)时,这两组请求可能是交错的。
发布于 2011-12-14 22:17:05
幂等性要求操作对于其域上的所有值都成立,即对于所有x都为f(f(x)) = f(x)。另一种思考方式是,如果一个操作与其本身的组合就是该操作,则该操作是幂等的。
发布于 2011-12-14 22:16:02
假设幂等性意味着服务器的状态最多只会被一系列调用更改一次。大多数时候,人们使用这个术语来表示服务器上的状态根本不会被任何数量的调用所改变。在这种情况下,您的两种情况之间的区别无关紧要。
https://stackoverflow.com/questions/8505889
复制相似问题