一. 什么是接口幂等性
幂等性原本是数学上的概念,用在接口上就可以理解为:同一个接口,多次发出同一个请求,必须保证操作只执行一次。它是系统服务对外的一种承诺(注意不是一种实现),接口服务提供方承诺只要调用接口成功了,外部多次调用对系统的影响是一致的。
举一个最常见的例子,用户购买商品后支付扣款成功,但是此时网络发生了异常,导致返回结果失败。因为没收到返回结果,用户就会再次点击付款按钮,就会多付了一笔钱,一旦用户发现余额少了,开发人员就等着被祭天吧,这就是没有保证接口的幂等性。
需要强调一点是,声明为幂等的服务会认为调用方调用失败是常态,并且调用失败后必然会有重试。
现在我们已经知道了什么是接口幂等性,那又有哪些场景需要保证幂等性呢?
二. 需要保证幂等性的场景分析
以 SQL 为例,有下面三种场景,只有第三种场景需要开发人员使用策略来保证幂等性:
1. 场景一:查询
SELECT column1 FROM table1 WHERE column2 = 2
无论执行多少次都不会改变状态,是天然的幂等。
2. 场景二:常量赋值更新
UPDATE table1 SET column1 = 1 WHERE column2 = 2
无论