Did*_*xis 11 rest web-services http http-verbs idempotent
所以"幂等"可以定义为:
如果执行N次的动作与仅执行一次动作具有相同的效果.
明白了,很容易.
我的问题是关于这个定义的微妙之处 - 这个行为本身就被认为是幂等的,还是你还必须考虑传递给行动的数据?
让我用一个例子来澄清:
假设我有一个更新某些资源的PUT方法,我们称之为 f(x)
显然,f(3)
只要我提供3作为输入,就是幂等的.同样显而易见的是,f(5)
将改变资源的价值(即,它将不再是3或以前的任何值)
所以当我们谈论幂等性时,我们是指动作/函数的概括(如,f(x)
),还是我们指的是动作/函数+传递给它的数据(即f(3)
)?
假设我有一个更新某些资源的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),两组请求可以交错.
归档时间: |
|
查看次数: |
3444 次 |
最近记录: |