用途
一般用于接口
是什么
幂等性:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。
举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。在以前的单应用系统中,我们只需要把数据操作放入事务中即可,发生错误立即回滚,但是再响应客户端的时候也有可能出现网络中断或者异常等等。
在增删改查4个操作中,尤为注意就是增加或者修改,查询对于结果是不会有改变的,删除只会进行一次,用户多次点击产生的结果一样,修改在大多场景下结果一样,增加在重复提交的场景下会出现。
(主要是对增加做幂等性。)
解决方案
1、用户在取款的时候,客户端先带上 token
请求服务端生成一个合法的取款凭证 ticketSequeuence
(例如在表单页面,加载完毕后请求获取一个票据)
2、用户在输入取款金额并确认取款后,客户端将会带上用户登录凭证 userToken
、取款票据 ticketSequence
以及取款金额 amount
进行请求
3、服务端接收到请求后,先校验 userToken
,校验失败则返回重新登录,否则换取 user对象
4、用户鉴权通过后,那么再来校验取款票据 ticketSequence
,票据不合法,那么取款失败,否则继续进行取款,一直到取款成功并根据票据作为幂等值来保存提现成功的结果
5、即使客户端请求后与服务端失去了联系,并且服务端处理成功,客户端处于假死的状态并再次请求取款,也是返回第一次的结果,并且是迅速的响应。
原文地址
https://blog.csdn.net/miachen520/article/details/91039661
https://learnku.com/articles/18678