接口幂等性设计

接口幂等性设计

为什么会产生接口幂等性问题?

1.网络波动,可能会引起重复请求。

2.用户重复操作,用户再操作时可能会无意触发多次下单交易,甚至没有响应而有意触发多次交易应用。

3.使用了失效或则超时重试机制(如nginx重试、RPC重试或业务层重试等)。

4.使用浏览器后按钮重复之前的页面操作,导致重复提交表单

如何保证接口幂等性?

1.一个方向是客户端防止重复调用。

2.一个是服务端进行校验。

Update操作幂等性原理

我们可以使用乐观锁。需要在表中增加一个timestamp或者version字段,这里以version字段为例。

--在更新数据之前先查询一下数据:

复制代码
select id,name,age,version from user id=123;

如果数据存在,假设查到的version等于1,再使用id和version字段作为查询条件更新数据:

复制代码
update user set age=age+1,version=version+1 
where id=123 and version=1;

更新数据的同时version+1,然后判断本次update操作的影响行数,如果大于0,则说明本次更新成功,如果等于0,则说明本次更新没有让数据变更。

具体步骤:

  1. 先根据id查询用户信息,包含version字段
  2. 根据id和version字段值作为where条件的参数,更新用户信息,同时version+1
  3. 判断操作影响行数,如果影响1行,则说明是一次请求,可以做其他数据操作。
  4. 如果影响0行,说明是重复请求,则直接返回成功。
相关推荐
瞎某某Blinder9 小时前
DFT学习记录[6]基于 HES06的能带计算+有效质量计算
python·学习·程序人生·数据挖掘·云计算·学习方法
XiYang-DING19 小时前
【Java EE】定时器
java·python·java-ee
流年似水~1 天前
MCP协议实战:从零搭建一个让Claude能“看见“数据库的工具服务
数据库·人工智能·程序人生·ai·ai编程
愚者游世2 天前
noexcept 说明符与 noexcept运算符各版本异同
开发语言·c++·程序人生·面试·visual studio
GeLx2 天前
从反爬角度:Playwright CDP 模式、Playwright 传统模式与 DrissionPage 的比较
python·程序人生·playwright·drissionpage·pyppeteer·浏览器自动化控制
浮尘笔记2 天前
在Snowy后台无需编码实现自动化生成CRUD操作流程
java·开发语言·经验分享·spring boot·后端·程序人生·mybatis
流年似水~2 天前
Docker/Kubernetes 实战:从入门到生产级部署
人工智能·程序人生·docker·语言模型·ai编程
XiYang-DING2 天前
【Java EE】锁策略、锁升级、锁消除和锁粗化
java·redis·java-ee
Bat U2 天前
JavaEE|多线程(六)
java·java-ee
Paxon Zhang2 天前
JavaEE 初阶大师之路之*线程,多线程编程,Thread类,变量捕获,中断线程* 一文全部搞懂!!
java·java-ee