接口幂等性设计

接口幂等性设计

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

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行,说明是重复请求,则直接返回成功。
相关推荐
NE_STOP3 小时前
Vibe Coding--初识AI编程
程序人生
这个DBA有点耶6 小时前
国产数据库有哪些?2026年主流产品选型对比
数据库·程序人生·职场和发展·架构·程序员创富·改行学it
Yvonne爱编码10 小时前
JAVA EE初阶---DAY 2 计算机网络
java·开发语言·计算机网络·算法·java-ee·php
我命由我1234511 小时前
RFID 技术极简理解
java·c语言·c++·嵌入式硬件·物联网·visualstudio·java-ee
CoderYanger11 小时前
Java EE:6.网络编程套接字(第二弹)
java·网络·程序人生·面试·职场和发展·java-ee·学习方法
我命由我1234512 小时前
Android 开发问题:EditText 控件的 android:imeOptions=“actionDone“ 属性不生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
我登哥MVP12 小时前
SpringCloud Alibaba 核心组件解析:服务熔断和降级
java·spring boot·后端·spring·spring cloud·java-ee·maven
我命由我1234512 小时前
Android 开发问题:获取到的 Android ID 发生了变化
android·java·开发语言·java-ee·android studio·android jetpack·android runtime
我登哥MVP12 小时前
SpringCloud Alibaba 核心组件解析:服务调用和负载均衡
java·spring boot·后端·spring·spring cloud·java-ee·负载均衡
我命由我1234512 小时前
Android 开发问题:Unable to find explicit activity class
android·java·java-ee·android studio·android jetpack·android-studio·android runtime