菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
12
0

API接口幂问题

原创
05/13 14:22
阅读数 22778

幂等这个词最初是用到数学,通俗的讲就是一个状态在一次变化和N次变化的结果是一样的,即无视次数,简单的说就是调用一次和调用N次的结果一定是一样的,这才叫幂等性。

幂等产生的原因:

  • 网络抖动:客户端发送写请求,请求已经达到了服务端,但是服务端在返回响应信息时出现了网络问题,客户端没收到响应,于是发起了重试。
  • 重试功能:使用微服务框架,开启了重试功能。
  • 表单重复提交

一、表单提交问题

可以使用token机制

二、insert接口

可以设置唯一约束

三、update接口

非幂等产生问题的场景:

  • 客户端A,调服务端B的 update接口 将数据修改为:update person set name="张三"  where  id=1001;
  • 客户端B,调服务端B的 update接口 将数据修改为:update person set name="李四"  where  id=1001;
  • 客户端A,由于没有收到反馈于是发起了重试。update person set name="张三" where  id=1001;

显然这样的结果不是我们想看见的,对于这样的问题我们可以采用乐观锁处理:

  • 客户端A,调服务端B的 update接口 将数据修改为:update person set name="张三" ,version=2  where  id=1001 and version=1;
  • 客户端B,调服务端B的 update接口 将数据修改为:update person set name="李四" ,version=3  where  id=1001 and version=2;
  • 客户端A,由于没有收到反馈于是发起了重试。update person set name="张三" ,version=2  where  id=1001 and version=1;显然这条数据不能处理成功,有效避免了数据被重复修改问题。

相关热门文章

发表评论

0/200
12 点赞
0 评论
收藏