如何保证接口幂等性

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

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

假如我们业务代码如下:

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

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

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

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

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

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

》》》 悲观锁

》》》乐观锁

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

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

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

相关推荐
Adellle32 分钟前
Java中同步和异步的区别,以及阻塞和非阻塞的区别
java·开发语言
qq_124987075338 分钟前
基于springboot+vue的物流管理系统的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·毕业设计
学习编程的Kitty2 小时前
JavaEE初阶——多线程(5)单例模式和阻塞队列
java·开发语言·单例模式
m0_372257022 小时前
项目下有多个模块,每个模块有pom文件,是怎么继承的
java·tomcat
oak隔壁找我2 小时前
Spring AI 入门教程,使用Ollama本地模型集成,实现对话记忆功能。
java·人工智能·后端
懒羊羊不懒@2 小时前
JavaSe—Stream流☆
java·开发语言·数据结构
郝开2 小时前
最终 2.x 系列版本)2 - 框架搭建:pom配置;多环境配置文件配置;多环境数据源配置;测试 / 生产多环境数据源配置
java·spring boot·后端
Homeey2 小时前
深入理解ThreadLocal:从原理到架构实践的全面解析
java·后端
ANGLAL2 小时前
27.短链系统
java
Lisonseekpan3 小时前
Git 命令大全:从基础到高级操作
java·git·后端·github·团队开发