接口幂等性设计

接口幂等性设计

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

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行,说明是重复请求,则直接返回成功。
相关推荐
humors2217 小时前
从数据到决策:汽车使用成本的精细计算指南
大数据·程序人生
丑八怪大丑9 小时前
会话_过滤器_监听器_Ajax
java-ee
郝学胜-神的一滴10 小时前
Qt 高级开发 010: 从跨界面传值到自定义信号
开发语言·c++·qt·程序人生·用户界面
婷婷_17213 小时前
JTAG (IEEE 1149.1)学习记录
学习·程序人生·debug·芯片·jtag·phy·eth/pcie
带带弟弟学爬虫__14 小时前
dyAPP数据采集-个人主页、发布、搜索、评论
服务器·python·算法·flutter·java-ee·django
辰海Coding14 小时前
MiniSpring框架学习-增加事件发布的简化 IoC 容器
java·学习·spring·java-ee
我命由我1234516 小时前
PHP - PHP 基本随机数生成函数
开发语言·ide·后端·java-ee·php·intellij-idea·intellij idea
humors22117 小时前
听劝和辨劝
大数据·程序人生
这个DBA有点耶1 天前
COUNT进阶:超大表的近似计数与HyperLogLog
数据库·sql·程序人生·学习方法·dba·改行学it
XiYang-DING1 天前
【Java EE】TCP—可靠传输
网络·tcp/ip·java-ee