如何保证接口幂等性

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

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

假如我们业务代码如下:

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

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

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

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

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

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

》》》 悲观锁

》》》乐观锁

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

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

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

相关推荐
JAVA面经实录9173 小时前
操作系统(面试全覆盖)
java·计算机网络·面试
编程的一拳超人3 小时前
Maven 国内高速镜像推荐(按速度排序)
java·maven
云烟成雨TD4 小时前
Spring AI 1.x 系列【61】Spring AI 2.0 升级指南
java·人工智能·spring
lulu12165440785 小时前
OpenRouter Fusion 多模型融合架构深度拆解:预算级模型组团打平 Fable 5,多模型协作才是 AGI 的正确打开方式?
java·人工智能·架构·ai编程·agi
雨辰AI5 小时前
生产级实测:SpringBoot3 + 达梦数据库接口从 200ms 优化至 20ms 完整调优指南
java·数据库·spring boot·后端·政务
(Charon)5 小时前
【C++ 面试高频:内存管理、RAII 和智能指针详解】
java·开发语言·word
凡人叶枫5 小时前
Effective C++ 条款39:明智而审慎地使用 private 继承
java·数据库·c++·嵌入式开发
轻刀快马6 小时前
跨越软硬件的共鸣(二):从 Cache 写策略看 Redis 与 DB 的一致性博弈
java·开发语言·redis·计算机组成原理
折哥的程序人生 · 物流技术专研6 小时前
Java 23 种设计模式:从踩坑到精通 | 装饰器模式 —— 比继承更灵活的扩展方式,你用过吗?
java·装饰器模式·java面试·结构型模式·java设计模式·javaio·从踩坑到精通