什么是幂等(Idempotency)呢?简单来说,一个操作如果多次任意执行所产生的影响,均与一次执行的影响相同,我们就称其为幂等。
这样说来,似乎很容易理解;但要知道这样的定义,其实是一个语义范畴对行为结果的定义。
如何用语法和规则去确保行为能达到这个结果,往往需要很谨慎地设计和实现。实际系统中,幂等是一个极为重要的概念,无论是在大型互联网应用还是企业级架构中,都能见到 REST API 被越来越多地采用,而正确实现幂等,往往是 API 中最难的技术点之一。
先说说为什么重要,我来举一个简单易懂的例子。
比如,你要处理一次电商网站收款或者付款的交易。当你给微信支付发送这个付款请求后,一个顺利的场景是不会有任何错误发生的,微信支付收到你的付款请求,处理所有转账,然后返回一个 HTTP 200 消息表示交易完成。
那如果发出请求后,有个请求超时,你再也没有收到关于这个请求是成功还是失败的回执,又该如何呢?