欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

HTTP/ 接口惰性和解决方案 - I:什么是幂等性:

最编程 2024-06-20 14:38:33
...
  • 1:方法调用一次和调用多次得到的结果是一样的,则称为方法是幂等的。

  • 2:HTTP幂等性:资源请求一次,或者多次产生的副作用是相同的。

    • 例如: 我们发送1次get请求,获取一个ok,与发送100次请求,获取这个ok,效果是一样的,都是得到一个ok,中间没有给服务器带来任何压力,也没有修改数据库,因此我们称这个get请求是幂等的。(不是强调结果是否相同,而是副作用是否相同
  • 3:HTTP中的请求是不是幂等的呢?

    • GET获取请求, 是幂等的。
      • 请求一次,与请求多次,不会对后端造成任何影响。
    • DELECT删除请求, 是幂等的。
      • 删除一次,与删除多次,结果都是被删除了。
    • POST请求创建资源,不是幂等的。
      • 两次创建操作,会对在后台创建两个不同的资源,因此不是幂等的。
    • PUT请求更新资源, 是幂等的。
      • 更新一次,与更新多次(数据相同), 得到的结果都是被更新后的。
  • 4: 应用角度----幂等性场景:

    • 1:因为网络波动,引起重复请求。
      • 案例:例如收藏(取消收藏)请求,我们请求了一次,因为网络原因,我们一直没有返回响应,用户由于没有看到被收藏了,结果再次点击收藏,而两次点击收藏导致我们后端仍处于未收藏状态,影响了幂等性。
    • 2: 用户重复操作,导致重复扣款,重复下单等问题。
      • 例如: 双十一,用户下单请求,提交一次后,由于网络堵塞,用户点击了刷新,导致相同订单重复请求,则会导致数据库中存在两个订单。
    • 3:应用中使用了超时,重试机制。
      • Nginx重试, RPC框架重试, 业务层面重试等。
    • 4:第三方平台接口(支付宝),异步回调。
      • 例如: 支付宝支付完成后,支付宝会调用我们后台接口,证明支付完成,但是,由于异常,支付宝调用了两次我们后台,则导致我们后台扣款了两次,实际支付宝只扣款一次。
    • 5: 页面刷新, 回退按钮,导致重复提交表单。
      • 例如:学校网站问卷调查统计,再提交时,由于网络延时,或者后端反应过慢,导致用户重新刷新,重新提交表单,则导致问卷多出一份。
    • 6:定时任务导致重复执行。
    • 7: 多核浏览器问题:
      • 某些版本的浏览器,请求一次,发送两次请求。

推荐阅读