在计算中,幂等操作是指如果使用相同的输入参数多次调用它,则不会产生额外的影响。例如,从集合中删除项目可以被视为对集合的幂等操作。
在数学中,幂等操作是f(f(x))= f(x)的操作 。例如, abs()
函数是幂等的,因为对于所有x
abs(abs(x)) = abs(x)
。
通过考虑数学定义中的x表示对象的状态,并且f是可以改变该对象的操作,可以协调这些稍微不同的定义。例如,考虑Python set
及其discard
方法。 discard
方法从集合中删除元素,如果元素不存在则不执行任何操作。所以:
my_set.discard(x)
与两次执行相同的操作具有完全相同的效果:
my_set.discard(x)
my_set.discard(x)
幂等操作通常用于网络协议的设计,其中执行操作的请求保证至少发生一次,但也可能不止一次发生。如果操作是幂等的,那么执行操作两次或多次都没有害处。
有关详细信息,请参阅 Wikipedia 关于幂等性的文章。
上述答案以前有一些不正确和误导性的例子。 2014 年 4 月之前撰写的评论参考旧版本。
幂等操作可以重复任意次数,结果将与仅执行一次相同。在算术中,向数字加零是幂等的。
在 “RESTful”Web 服务的上下文中对 Idempotence 进行了大量讨论。 REST 旨在最大限度地利用 HTTP 来为程序提供对 Web 内容的访问,并且通常与基于 SOAP 的 Web 服务形成对比,后者只是在 HTTP 请求和响应中挖掘远程过程调用样式服务。
REST 将 Web 应用程序组织为 “资源”(如 Twitter 用户或 Flickr 图像),然后使用 POST,PUT,GET 和 DELETE 的 HTTP 谓词来创建,更新,读取和删除这些资源。
幂等在 REST 中起着重要作用。如果您获取 REST 资源的表示(例如,从 Flickr 获取 jpeg 图像),并且操作失败,您可以反复重复 GET 直到操作成功。对于 Web 服务,获取图像的次数无关紧要。同样,如果您使用 RESTful Web 服务更新您的 Twitter 帐户信息,您可以多次将新信息 PUT,以便从 Web 服务获得确认。投入一千次与投入一次相同。类似地,删除 REST 资源一千次与删除一次相同。因此,幂等性使得构建对通信错误具有弹性的 Web 服务变得容易得多。
进一步阅读: Ricfuldson和 Ruby 的RESTful Web 服务 (第 103-104 页讨论了幂等性),以及 Roy Fielding 关于 REST的博士论文 。 Fielding 是 HTTP 1.1,RFC-2616 的作者之一,它在第 9.1.2 节中讨论了幂等性。
无论您调用多少次操作,结果都是一样的。