如何保证接口幂等性

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

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

假如我们业务代码如下:

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

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

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

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

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

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

》》》 悲观锁

》》》乐观锁

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

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

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

相关推荐
余额瞒着我当琳13 分钟前
哈希表底层原理解析,直接定址法,哈希冲突,负载因子,哈希函数,开放定址法
java·c++·哈希算法·散列表
paopaokaka_luck1 小时前
民宿管理系统 (AI民宿总结、协同过滤推荐算法、WebSocket 在线咨询、ECharts 经营分析、房态与结算联动、 民宿预订业务闭环)
java·人工智能·spring boot·websocket·数据分析·echarts·推荐算法
java资料站1 小时前
十四、Spring AI Alibaba · 案例 · 基于 HumanInTheLoop 的内容审核系统
java·spring·状态模式
SunnyDays10112 小时前
如何使用 Java 提取 PPT 中的文字:整份文档、指定幻灯片与表格内容
java·powerpoint
毕设单片机2 小时前
springboot志愿服务平台的设计与实现 36731
java·spring boot·mysql·志愿服务平台
IT_Octopus2 小时前
【零基础入门 LLM 开发 · Day 15】:LangChain 注册工具——告别手写 JSON Schema
java·langchain·json
Elastic 中国社区官方博客2 小时前
教程:监控 Java 应用
java·开发语言·数据库·elasticsearch·搜索引擎·全文检索
ShineWinsu2 小时前
对于JavaScript:初识JavaScript以及输入输出
java·开发语言·前端·javascript·css·面试·html
小小安于乱2 小时前
linux中java的springboot程序获取IP地址间歇性10秒卡顿问题
java·开发语言