什么时候可以称之为操作幂等?

时间:2016-09-01 10:25:58

标签: rest idempotent

维基百科中幂等元的定义是幂等是数学和计算机科学中某些操作的属性,可以多次应用而不会将结果更改为初始应用之外。< / em>的

问题是:我有REST API PUT调用,它会更新域聚合的属性。此外,它会为每个已更新的属性触发事件。现在,如果我们有两个完全相同的PUT调用一个接一个地调用到我们的后端:

  1. 第一个PUT调用更新聚合的属性,并且可以说5个事件。
  2. 第二个PUT调用更新聚合的属性,但不会触发任何事件,因为聚合的属性没有改变(第一个PUT调用更新了聚合属性的值)。
  3. 问题是:这个操作是幂等的吗?

4 个答案:

答案 0 :(得分:1)

This question and its answers解释幂等操作是什么。简而言之:重复呼叫不会改变结果。

因此,根据您对此操作的描述,它似乎符合幂等性。

答案 1 :(得分:0)

是的,它是:无论您发送相同的PUT请求多少次,它都会使您的系统(您的聚合)处于相同的状态。

答案 2 :(得分:0)

是和否。从数据的角度来看,它是幂等的。无论执行调用多少次,数据库中的数据都不会更改。但从某种意义上来说它不是幂等的,因为某些日志或其他事件可能会改变系统的“熵”:)

答案 3 :(得分:0)

这取决于您的定义。由于您有副作用(如果存在差异,则会使某些事件发生故障),多次调用可能会导致比预期更多的副作用。但是,应用程序的状态,忽略副作用,没有并发性,将是幂等的。请记住,REST调用是通过异步网络进行的,因此这是一个分布式系统。

如果您有两个并发进程,它们可能会触发不同数量的副作用。例如:

a = 2
a = 3
a = 2 
a = 3

将发射两倍于

的事件
a = 2
a = 2 
a = 3
a = 3

这可能会造成一些麻烦。