接口的幂等性

接口调用存在的问题:

现如今我们的系统大多拆分为分布式SOA,或者微服务,一套系统中包含了多个子系统服务,而一个子系统服务往往会去调用另一个服务,而服务调用服务无非就是使用RPC通信或者restful,既然是通信,那么就有可能在服务器处理完毕后返回结果的时候挂掉,这个时候用户端发现很久没有反应,那么就会多次请求,那么处理数据的结果是否要统一呢?那是肯定的!尤其在支付场景。
接口幂等性:

接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,这就没有保证接口的幂等性;

查询和删除没什么可说的主要说下更新和新增操作

更新操作

修改在大多场景下结果一样,但是如果是增量修改是需要保证幂等性的,如下例子:

把id为XXX的记录的A字段值设置为1,这种操作不管执行多少次都是幂等的
把id为XXX的记录的A字段值增加1,这种操作就不是幂等的

新增操作

增加在重复提交的场景下会出现幂等性问题,支付问题,那么如何设计接口才能做到幂等呢?

常见的两种实现方案:

1. 通过代码逻辑判断实现 

通过代码逻辑判断实现接口幂等性,只能针对一些满足判断的逻辑实现,具有一定局限性

2. 使用token机制实现

使用token机制实现接口幂等性,通用性强的实现方法(1、生成全局唯一的token 2、一次有效性    缓存token 使用即删除)

原文地址:https://www.cnblogs.com/setevn/p/12971006.html