如何保证接口的幂等性
什么是幂等性
幂等性是系统服务对外一种承诺,承诺只要调用接口成功,外部多次调用对系统的影响是一致的。声明为幂等的服务会认为外部调用失败是常态,并且失败之后必然会有重试。
通俗地说,接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。
举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性
什么情况下需要幂等
以SQL为例子
SQL | 分析 | 是否幂等 |
---|---|---|
SELECT col1 FROM tab1 WHER col2=2 |
无论执行多少次都不会改变状态 | 是 |
UPDATE tab1 SET col1=1 WHERE col2=2 |
无论执行成功多少次状态都是一致的 | 是 |
UPDATE tab1 SET col1=col1+1 WHERE col2=2 |
每次执行的结果都会发生变化 | 否 |
INSERT INTO USER(userid,name) VALUES(1,'a') < |