接口幂等性设计

接口幂等性设计

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

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行,说明是重复请求,则直接返回成功。
相关推荐
我命由我1234517 小时前
Android 开发问题:Cannot resolve method ‘repeat‘ in ‘String‘
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
xiaoyustudiowww1 天前
白盒测试和黑盒测试一点个人观点
程序人生
可触的未来,发芽的智生1 天前
发现-元认知技能,激起神经符号系统跃变
javascript·人工智能·python·程序人生·自然语言处理
星栈独行2 天前
翻完 Pi 源码:它和 Codex、Claude Code 有何不同
开发语言·javascript·人工智能·程序人生
御坂镜2 天前
【嵌入式】焊接设备物料相关QA
嵌入式硬件·程序人生
dear_bi_MyOnly5 天前
【SpringBoot配置文件】
java·spring boot·后端·学习·spring·java-ee·学习方法
我命由我123455 天前
Android 开发问题:java.lang.NoSuchMethodError:No virtual method readAllBytes()
android·java·java-ee·kotlin·android studio·android-studio·android runtime
星栈独行5 天前
Node 接口该写同步还是异步?
服务器·开发语言·后端·程序人生·node.js
haolly5 天前
「主流网页高亮插件横评」—— Acorny 事实卡 + 完整正文
经验分享·程序人生·学习方法