【问题标题】:When can you call operation idempotent?什么时候可以称操作是幂等的?
【发布时间】:2016-09-01 10:25:57
【问题描述】:

维基百科中对幂等的定义是幂等是数学和计算机科学中某些运算的性质,可以多次应用而不改变初始应用以外的结果。

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

  1. 第一次 PUT 调用会更新聚合的属性并触发 5 个事件。
  2. 第二次 PUT 调用更新聚合的属性,但不触发任何事件,因为聚合的属性没有改变(第一次 PUT 调用更新了聚合属性的值)。

问题是:这个操作是幂等的吗?

【问题讨论】:

  • 维基百科文章中提到的那种操作通常没有副作用。

标签: rest idempotent


【解决方案1】:

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

所以从你对这个操作的描述来看,它似乎是幂等的。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        将触发两倍于

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

        这可能会引起一些麻烦。

        【讨论】:

          猜你喜欢
          • 2010-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-30
          • 1970-01-01
          • 2011-02-24
          • 1970-01-01
          相关资源
          最近更新 更多