幂等性:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。
举个例子:当我们支付扫码的时候,有时候会网络波动,或者手机断流,我们会对一个按钮进行疯狂的点击,但是我们的付款次数就只有一次,不会出现支付两次,产生两次流水的情况。
在增删查改的操作中,尤其注意新增或者修改的问题。
另外还需注意的是:不是所有的接口都需要考虑接口的幂等性。
有唯一的标识接口
唯一标识:id,订单号,支付单号可以作为唯一凭证的。
删除
由于删除具有天然的幂等性,操作多次,对最终的数据结果影响一致,故简单的删除无需考虑幂等性的影响。
修改
修改的幂等性可以通过乐观锁来控制,通过查询出版本号,然后修改的时候带上版本号一起做修改操作
update table
set
param = #{param},
version = #{version} + 1
...
where
id = #{id}
and version = #{version}
新增
新增的幂等性可以通过分布式锁来解决。就是新增的时候,通过唯一标识上锁,然后待操作完成后释放分布式锁。
没有唯一的标识
自己进入页面的时候自己生成一个token,然后进行增删改的时候,带入token,并通过唯一标识上锁,来达到幂等性问题的解决。
总结
总之,接口的幂等性问题,主要分为有没有唯一标识,如果没有则生成,如果有,则使用分布式锁,避免数据重复提交的问题。
最后提醒一句:不是所有的接口都需要考虑接口的幂等性。
评论区