如何保证接口幂等性

接口幂等性是指对同一操作发起的一次或多次请求结果是一致的,并且不会因为重复请求而产生副作用。

例如前端应用对后端发出请求,可能由于网络原因,前端并未接收到后端响应,前端进行重试,对后端同一接口发出多次请求

假如我们业务代码如下:

java 复制代码
//查询1号员工数据
Employee employee = employeeService.selectById(1);
//更新工资
employee.setSalary(employee.getSalary() + incrSalary);
//执行更新语句
employeeService.update(employee)

那么发一次请求就会执行一次update,业务规则就被破坏了!

为了避免这种情况发生,以下是实现接口幂等性的一些方法:

使用唯一事务标识 :为每次请求分配唯一的事务ID,服务端根据这个ID判断是否已经处理过该请求,确保操作只被执行一次。请求的时候在请求头增加唯一的请求流水号,后端在做操作之前首先查redis是否有操作成功的数据,有则不做update操作,没有则执行逻辑代码

状态检查:在执行操作前检查系统状态,如果发现操作已经执行过,则不再重复执行,第一次做修改的时候加上修改时间修改为当前时间,下次请求查询的时候加上查询条件只查询修改时间大于三个月时间的员工。

乐观锁或悲观锁 :在数据库操作中使用锁机制,防止并发操作导致的数据不一致问题。

》》》 悲观锁

》》》乐观锁

结果验证:在客户端进行结果验证,如果发现结果与预期不符,可以重新发送请求。

限制重试次数:对于可能因为网络等原因需要重试的操作,限制重试的次数和时间间隔,避免无限制的重试导致的问题。

需要注意的是,幂等性并不是所有接口都需要具备的特性,它通常适用于那些可能会因为网络问题或其他原因而被重复调用的接口,如支付、订单提交等关键操作。对于那些不需要保证幂等性的接口,比如更新用户信息等,通常不需要特别设计幂等性处理机制。

相关推荐
indexsunny几秒前
互联网大厂Java面试实战:微服务、Spring Boot与Kafka在电商场景中的应用
java·spring boot·微服务·面试·kafka·电商
SUDO-19 分钟前
Spring Boot + Vue 2 的企业级 SaaS 多租户招聘管理系统
java·spring boot·求职招聘·sass
sheji341614 分钟前
【开题答辩全过程】以 基于spring boot的停车管理系统为例,包含答辩的问题和答案
java·spring boot·后端
重生之后端学习19 分钟前
21. 合并两个有序链表
java·算法·leetcode·链表·职场和发展
南屿欣风23 分钟前
Sentinel 熔断规则 - 异常比例(order & product 示例)笔记
java·开发语言
u01040583630 分钟前
使用Java实现高性能的异步编程:CompletableFuture与Reactive Streams
java·开发语言
专注VB编程开发20年44 分钟前
c#Type数组转成字符串的名称
java·开发语言
中年程序员一枚1 小时前
多数据源的springboot进行动态连接方案
java·spring boot·后端
w***76551 小时前
SpringBoot集成MQTT客户端
java·spring boot·后端
编程饭碗1 小时前
【多线程编程】
java·开发语言