怎么理解接口幂等,项目中如何保证的接口幂等

发布时间:2024年01月13日
都 2024?年了,竟然还有人不知道接口幂等是什么东西。
hi,大家好,我是 浮生
今天正好有空,给大家分享一下 幂等的实现。 什么是幂等?

一、问题解析

简单来说,就是一个接口,使用相同的参数重复执行的情况下,对数据造成的改变只发生一次。
比如支付操作,如果支付接口被重复调了 N 次,那资金的扣减只发生一次,这就是幂等。有同学会比较好奇, 这个事情不是很正常吗?为什么还要单独拧出来说。原因很简单{如图}, 在分布式架构中,由于引入了网络通信导致一个请求,除了成功/失败以外,还多了一个未知状态。
也就是如果一次远程接口调用失败,有可能这个请求在服务端执行成功了。而客户端为了确保本次请求执行成功,可能会发起重试的操作,导致同一个接口被重复调用了多次。 为了保证服务端接口的幂等性,我们就需要在服务端的接口中去识别当前请求是重复请求,从而不再进行数据的变更操作。
通常的解决方案有几种。
31. 使用数据库唯一索引的方式实现, 我们可以专门创建一个消息表,里面有一个消息内容的字段并且设置为唯一索引,每次收到消息以后生成 md5 值插入到这个消息表里面。一旦出现重复消息,就会抛异常,我们可以捕获这个异常来避免重复对数据做变更。
32. 使用 Redis 里面的 setNx 命令,我们可以把当前请求中带有唯一标识的信息存储到Redis 里面,根据 setNx 命令返回的结果来判断是否是重复执行,如果是则丢弃该请求。
33. 使用状态机的方式来实现幂等,在很多的业务场景中,都会存在业务状态的流转,并且这些状态流转只会前进,所以我们在对数据进行修改的时候,只需要在条件里面带上状态,就能避免数据被重复修改的问题。

二、问题总结

当然,除了这几种方法以外,肯定还有其他更多的解决方案。不管采用哪种方案,核心本质都是需要去识别当前请求是重复请求。当然,如果大家还有更好的方案,可以在评论区留言。

?三、粉丝福利

最近很多同学问我有没有java学习资料,我根据我从小白到架构师多年的学习经验整理出来了一份50W字面试解析文档、简历模板、学习路线图、java必看学习书籍?、 需要的小伙伴 可以关注我
公众号:“?
灰灰聊架构?”, 回复暗号:“?321?”即可获取

文章来源:https://blog.csdn.net/sinat_53467514/article/details/135571721
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。