1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 接口幂等性及如何实现幂等性

接口幂等性及如何实现幂等性

时间:2020-07-31 08:03:27

相关推荐

接口幂等性及如何实现幂等性

接口幂等性及如何实现幂等性

概述

幂等性,用数学函数表示为,f(f(x)) = f(x),即幂等元素运行多次,还等于原来运行的结果。延伸到我们java接口上就是,一个接口调用多次(每次入参相同),与这个接口调用一次的结果相同。生产中与接口幂等性相关的业务问题有如下:

1)提交订单按钮如何防止重复提交?

2)表单录入页如何防止重复提交?

3)微服务接口,客户端重试时,会对业务数据产生影响吗?

带着以上问题,来看看如何实现接口的幂等性。

一、我们什么情况下会多次调用接口的场景

1、网络延迟,导致调用接口后为能及时响应,此时会多次点击重试;

2、抖动造成连续点击触发接口的按钮;

3、人为恶意连续多次调用接口。

二、如何防止接口多次调用

前端页面实现

1、前端页面实现:对于前端触发的接口调用,由于网络延迟或失误多次点击按钮导致的,可在前端对按钮进行设置,接口返回调用结果前,禁止再次点击按钮,但前端的实现方式无法根本上规避此类问题;

2、人为恶意调用时,一般会绕过前端调用接口,此时只能从后端服务器进行处理。

后端如何实现接口幂等性

这里讨论的幂等性通常指的是对数据库crud来说的,一般我们接口幂等性设计时也是要结合实际来看,比如下如下场景我们就需要做接口的幂等性设计

1)多次点击提交订单,后台应该只生成一个订单;

2)支付时,由于网络问题重复,应该只扣一次钱;

并不是所有的接口都需要实现接口幂等性,而我们实现接口幂等性也有一个核心思想,就是通过唯一的业务单号保证幂等。

后端一般为4类接口进行,查询、删除、插入及更新;

查询

查询不会对数据存储造成影响,查询操作无论执行多少次,最终结果都是一致,所以查询时天然幂等性的,一般我们无需对查询操作进行特殊处理;

删除

删除操作一般分为有唯一业务单号和无唯一业务单号两种,

1)对于有唯一业务单号,比如数据id,由于第一次删除操作时,已经将数据进行删除,第二次删除时,由于无法找到唯一业务单号对应的数据,因此此时删除操作对数据时没有影响的,所以我们可以认为此时是幂等的;

2)对于没有唯一业务单号的删除操作,如删除没有审核的数据,由于第一次删除后,在下一次删除操作前,可能出现生成新的未审核的数据,造成多次删除操作均删除了数据,所以为非幂等,我们需要进行特殊处理设计接口的幂等性;一般使用token机制进行解决。

新增

新增操作同样也分为有唯一业务单号和无唯一业务单号两种;

1)有唯一业务单号,第一次新增成功,第二次新增时,由于唯一业务单号已经生成了数据,再次新增数据无法成功,所以此类情况为幂等;

2)无唯一业务单号,同样需求认为添加唯一业务单号处理,一般也是用token机制解决;

更新

更新操作分为3种

1)有唯一业务单号,同时每次更新会记录更新次数,那这种情况下,更新操作就不是幂等的,我们可以用乐观锁的方式实现,给数据添加版本号;

2)有唯一业务单号,不记录更新操作,此时就是幂等的;

3)无唯一业务单号,同删除操作,此时是非幂等的,需要用到token机制进行解决。

三、token机制

跳转到接口操作页面时,后台生成一个唯一的序列号,调用接口时传入改序列号,接口校验序列号确实存在,用该序列化生成分布式锁;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。