接口幂等性设计

接口幂等性设计

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

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行,说明是重复请求,则直接返回成功。
相关推荐
涵美女程序猿1 小时前
ChatCut online 剪容器镜像构建录屏:Dockerfile、日志与镜像摘要怎样对应
程序人生·电脑
我命由我123451 天前
Android 设备的日志缓冲区被写满,logcat: Unexpected EOF!
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
CoderYanger1 天前
A.每日一题:3345. 最小可整除数位乘积 I
java·数据结构·程序人生·算法·leetcode·面试·学习方法
xieliyu.1 天前
计算机网络|数据链路层详解:MAC 地址、交换机、ARP 协议、CRC 校验
java·网络·笔记·计算机网络·java-ee
HugoStudio_SWAN3 天前
【擦除重绘】C++ 控制台动画:弹跳 Logo DVD 屏保效果
开发语言·c++·学习·程序人生
郝学胜-神的一滴3 天前
C++11 工程级应用 06:自己造一个类似Python的Range迭代器
开发语言·c++·windows·python·程序人生·microsoft
2601_962071003 天前
【Java EE】SpringBoot的创建与简单使用
spring boot·后端·java-ee
木井巳3 天前
【JavaEE】Spring Web MVC 入门
java·spring boot·spring·servlet·java-ee