今天我们来聊聊关于接口的幂等性问题。
什么是幂等性
所谓幂等,就是任意多次执行所产生的影响均与一次执行的影响相同。
在 restful 规范中,常见的请求方式和接口幂等性关系如下:
请求方式 | 操作 | 是否幂等 |
---|---|---|
GET | 查询数据 | 是 |
POST | 新增数据 | 否 |
PUT | 更新数据 | 直接更新为某个值,满足幂等,如:set a = 1;累加操作的更新,不满足,如:set a = a+1 |
DELETE | 删除数据 | 根据唯一条件删除,满足幂等;否则,不满足,幂等,比如:根据某一条件删除一批数据后,又新增了一条满足该条件的数据,又执行了一次删除,那么就会删除掉新增的这条数据 |
为什么会产生接口幂等性问题
在计算机应用中,可能遇到网络抖动,临时故障,或者服务调用失败,尤其是分布式系统中,接口调用失败更为常见。为了保证服务的完整性,我们可能会发起接口的重试调用,如果接口不处理幂等,可能对系统造成很大的影响,因此接口的幂等设计尤其更为重要。
对于业务中需要考虑幂等性的地方一般都是接口的重复请求,重复请求是指同一个请求因为某些原因被多次提交。导致这种情况的发生有以下几种常见的场景