首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

接口的幂等性如何设计

什么是幂等

幂等原先是数学中的一个概念,表示进行1次变换和进行N次变换产生的效果相同。

所谓幂等:指多次执行相同操作的结果与执行一次相同操作的结果相同。

设计具有幂等性的接口是很重要的,特别是在处理涉及资源状态更改的操作时。

一、幂等性的出现场景

1、前端重复提交

就好比有个新增商品的功能,有个保存按钮,如果前端连续多次点击保存,后端就会收到多次请求接口,如果没做好幂等就会重复创建了多条记录,

就会出现脏数据。

这个也就是我们所说的如何防止前端重复提交的问题。

2、接口超时重试

当我们调取第三方接口的时候,有可能会因为网络等原因导致调用失败,所以我们会对接口调用添加失败重试的机制,Spring可以通过@Retryable注解实现重试机制。

既然重试就可能出现重复调用接口。这时再次调用时如果没有做好幂等,就可能出现脏数据。

3、消息重复消费

这个是无法避免的,因为我们说MQ在生产端和消费端都有重试机制,也就是同一消息很可能会被重复消费。

如果业务保证多次消费的结果是一样的那没问题,但是如果业务无法满足那就需要通过其它方式来保证消费端的幂等。

二、如何保证幂等

以下是设计具有幂等性的接口的一些常见策略:

1. 使用HTTP方法:

  - 使用HTTP的幂等方法,例如GET、PUT和DELETE,来执行对资源的操作。

  - 避免使用非幂等的方法,如POST,除非有明确的理由需要使用它,并且在设计中考虑到了幂等性。

2. 提供唯一标识符:

  - 要确保每个资源都有一个唯一的标识符,如ID或Key。

  - 使用这个唯一标识符作为请求的一部分,以便在每次请求时能够准确定位要操作的资源。

3. 检查资源状态:

  - 在处理资源更改操作之前,检查当前资源的状态。

  - 如果已经处于目标状态,可以返回成功的响应而不执行任何更改。

4. 忽略重复请求:

  - 如果接收到重复的请求,可以选择忽略它们,而不对资源进行任何更改。

  - 可以使用请求标识符、时间戳或其他标识来检查请求的唯一性。

5. 使用乐观并发控制:

  - 在资源状态中包含一个版本号或时间戳,并在每次请求时将其包含在请求中。

  - 在处理请求之前,比较资源的版本号或时间戳,如果发生冲突,则返回冲突的响应。

6. 提供幂等性标识符:

  - 对于非幂等的操作,可以要求客户端提供一个幂等性标识符。

  - 在每次请求中,客户端提供相同的幂等性标识符,以确保相同的操作只被执行一次。

7. 记录请求和结果:

  - 在服务器端记录每个请求和其结果,以便在处理重复请求时进行检查和跟踪。

请根据你的具体需求和业务逻辑选择适合的策略,以确保接口的幂等性。在设计接口时,考虑到数据的一致性和安全性也是很重要的。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OCPzyRy9ZOKEK20ayyB0nx0w0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券