幂等性的概念初识

幂等性的理解

从RESTful服务的角度来说,如果一个操作或者服务调用是幂等性的,那么客户端以相同的方式重复调用服务就应该产生相同的结果。换句话说,发出多个请求和发出一个请求应该具有相同的效果。需要注意的是,虽然幂等性操作会在服务端产生相同的结果(没有副作用),但是操作的response响应本身可能并不相同(比如资源的状态会在不同请求之间发生变化)。

不同场景下的体现

在增删改查四个操作中,查询对于结果是不会改变的,删除只会进行一次,但是多次删除服务端的状态是相同的,但是返回可以不同,DELETE操作成功通常会返回200(OK)或204(No Content),但后续相同的DELETE操作可能会返回404(Not Found),除非服务被配置成只标记资源的删除状态而不是真正地删除资源。但是,当服务实际上已删除指定资源时,后续DELETE调用就会找不到该资源,并返回404。增加在重复提交的情况下会出现。

为什么要设计幂等性的服务

幂等可以使得客户端逻辑处理变得简单,但是却以服务逻辑变得复杂为代价。满足幂等服务的需要在逻辑中至少包含两点:
1.首先去查询上一次的执行状态,如果没有则认为是第一次请求
2.在服务改变状态的业务逻辑前,保证防重复提交的逻辑

幂等性的不足

幂等是为了简化客户端逻辑处理,却增加了服务提供者的逻辑和成本,是否有必要,需要根据具体场景具体分析,因此除了业务上的特殊要求外,尽量不提供幂等的接口。
1.增加了额外控制幂等的业务逻辑,复杂化了业务功能;
2.把并行执行的功能改为串行执行,降低了执行效率。

保证幂等性的策略

幂等需要通过唯一的业务单号来保证。也就是说相同的业务单号,认为是同一笔业务。使用这个唯一的业务单号来确保,后面多次的相同的业务单号的处理逻辑和执行效果是一致的。
下面以支付为例,在不考虑并发的情况下,实现幂等很简单:
①先查询一下订单是否已经支付过,
②如果已经支付过,则返回支付成功;如果没有支付,进行支付流程,修改订单状态为‘已支付’。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值