为什么说接口幂等性很重要

news2024/9/23 15:29:44

先讲个故事

大概三年前,外卖平台 Uber Eats 在印度发生了一次重大事故,使得用户可以免费获得食品。

一天早上,有人试图通过印度的 Uber Eats 订购食物,并使用印度的支付平台 Paytm 付款。但是,他的账户里面没有足够的余额,没有下单成功。但是,这个人不死心,继续订购,这一次居然成功了!让他在没有付款的情况下,可以订购食物。消息传开以后,人们疯狂地下单。Uber Eats 短时间涌入大量订单,餐馆无法接单,不得不下线。平台发现了以后,立刻停止使用 Paytm 作为付款方式。调查发现,这个事故与 Paytm 团队前一天上线的一个看似无害的代码变更有关。他们把付款失败的 API 从幂等改为非幂等。

事后,餐馆得到了报酬,滥用这个 bug 的用户也没被追究,免费享用了食物

什么是幂等

幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变,表达式f(x) =f(f(x)) . 例如绝对值abs(x)=abs(abs(x))

在计算机可相互中,幂等表示一次或者多次请求某个资源时,具有相同的结果。即多次相同请求锁产生的影响和第一次请求执行的影响相同,幂等性是系统对外一种承诺

举个例子如果你重复请求同一个 API,每次都得到相同的响应。如下

  1. "尝试在没有资金的情况下向 X 钱包充值"-> 返回 Error1

  1. "尝试再次在没有资金的情况下向 X 钱包充值"-> 返回 Error1

上面的故事中两次相同的请求变成了非幂等

  1. "尝试在没有资金的情况下向 X 钱包充值"-> 返回 Error1

  1. "尝试再次在没有资金的情况下向 X 钱包充值"-> 返回 Error2

故事里Uber Eats 的代码有问题。他们假设这个 API 是幂等的,并没有做正常的返回结果处理, 只比较了再次请求失败返回的结果,跟上一次失败的结果是否相同。如果不相同,就认为第二次支付成功了。正是因为这样的处理,当 Paytm 团队将付款失败API从幂等修改为非幂等时。第二次付费失败被当做了付款成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/351315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝牙耳机哪款性价比高音质好?2023公认音质最好的蓝牙耳机

如今音乐成了当下解压的方式之一,甚至是集中注意力的法器。耳机作为传播音乐的媒介,每个人对自己的专属耳机总有那么点小追求,高质量的耳机不仅保护双耳,带来的音质能让你的耳朵分分钟怀孕,下面分享几款2023年音质高的…

Cain执行中间人攻击

实验目的:通过构建虚拟场景,了解中间人攻击和钓鱼网站攻击的执行流程,熟练使用Cain & Abel工具实现攻击,并掌握识别和防御此类攻击的技术原理和方法。 一、场景简介 甄某为犯罪嫌疑人,警察想获得甄某在其单位网站…

IB学科学习方法分享,看看不同学科怎么学习?(一)

在这个部分,我们邀请到了在各个学科中突出的同学们,让他们介绍自己的学习方法。同辈的经验总是我们能够获取的珍贵的宝藏! 分享人:吴 分享学科:VA HL (个人选课:HL:VA 中文 经济…

同行不同命:极兔喜、韵达愁?

配图来自Canva可画 年前买坚果、牛奶、灯笼、对联等年货,年后寄香肠、腊肉、泡菜、水果等特产,春节前后是快递业迎来收发货小高峰,三通一达,顺丰、京东、极兔相继宣布“春节不打烊”消息,全力保障快递运力。 春节快递…

力扣-组合两个表

大家好,我是空空star,本篇带你了解一道简单的力扣sql练习题。 文章目录前言一、题目:175. 组合两个表二、解题1.left join提交SQL运行结果2.right join提交SQL运行结果总结前言 一、题目:175. 组合两个表 表: Person ----------…

Bernstein-Vazirani算法

B-V算法 (1) 问题描述 给定布尔函数f:{0,1}n→0,1f:{\left\{ {0,1} \right\}^n} \to{0,1}f:{0,1}n→0,1, 函数fff的值是由输入比特串xxx和确定的比特串sss做模2意义下的内积:f(x)x⋅s(mod2),f\left( x \right) x \cdot s\left( {\bmod 2} \right),f(x)x⋅s(mod2),…

【Node.js】 npm与包

npm与包什么是包包的来源为什么需要包从哪里下载包怎么下载包初体验在项目中安装包的命令npm的注意点包的语义化版本规范包管理配置文件(package.json)当第三方包的体积过大时快速创建package.jsondependencies节点devDependencies节点卸载包解决下载包速…

H.264视频隐写中可用于隐藏的场地(变换过程)

与静止图像中的信息隐藏类似,通过位平面替换的方式,亮度DCT系数通常被用于信息隐藏。 Ma等[77]提出将信息嵌入在I-frame中量化的DCT系数中(亮度)。在分析DCT系数与像素值产生的失真之间的关系的基础上,对几个系数进行配对,以达到数…

Web前端的未来发展怎样?

在求职的道路上,很多人都会经历漫长的迷茫期,如何找到职业方向成为人很多正在探索的事情!当我们决定学习一个技能的时候,首先会考虑到零基础是否可以学,这个技术的前景怎么样,薪资高不高,未来发…

JavaSE学习day8 API的使用和String的内存原理

1.API 1.1API概述 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这…

基于机器学习的推荐算法研究与实现

摘要随着互联网的普及,人们可以通过搜索引擎、社交网络等方式获取大量的信息资源。但是,面对如此之多的信息,人们往往会感到迷失和困惑,无法快速准确地找到自己需要的信息。在这种情况下,推荐算法的出现为我们提供了一…

如何使用Xshell巧妙的连接服务器

最近一直在想到底写那些技术性文章,正好我之前买的一台服务器还没怎么使用,所以准备打算出一期在Xshell上使用服务器的教程的。 首先,为什么要使用Xshell连接云服务器呢? 1、自己打开服务器很麻烦,每次都要在网页进行登录操作&…

2023美赛C题:预测 Wordle 结果

以下内容全部来自本人人工翻译,仅供参考。 文章目录背景要求附件数据文件条目描述纽约时报网站上发布的Wordle指导方针词汇表参考文献服务背景 Wordle是目前纽约时报每天提供的一种受欢迎的谜题。玩家试图通过在六次或更少的机会内猜测一个五个字母的单词来解决谜题…

SAC代码 pytorch框架,2023年了还在用假的SAC?

呀他温,博主这次真要红温了,中路一个红温兰博请求对线!!!!!! 莫烦老师的强化学习视频不出SAC,我只能去看看别的程序员讲解SAC算法。结果。。。。 唉,&#…

后端,我是认真的

web框架介绍 1. 什么是web框架 应该叫web应用框架(web application framework)是一种开发框架。 通俗点来说,就是用来开发web应用的程序。 2. 为什么要使用框架来开发 互联网行业流行一句话叫“不要重复造轮子”,特别是对于新手和应用层开发人员。对于w…

TLP5754的代替品SLM343兼容光耦的单通道隔离驱动 应用解决方法

TLP5754的代替品SLM343兼容光耦的单通道隔离驱动应用解决方法是一种光兼容的单通道隔离MOSFET、IGBT具有不同驱动电流能力的栅极驱动器,以及UVLO电压电平。峰值输出电流为4.0A。主要特点和特点带来显著的性能和可靠性。性能亮点包括高共模瞬态抗扰度(CMT…

给 “rm” 命令添加个“回收站”,再也不用担心误删文件了!

1.rm命令解析 rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。 注意:使用rm命令要格外小心。因为一旦删除了…

WebSocket内存马之tomcat-websocket源码实现(内存马系列篇七)

写在前面 这篇主要是分析一下WebSocket协议在Tomcat容器中的源码实现,方便大家在后面能够更好的了解下一篇Websocket型内存马的原理。 这个也是内存马系列第七篇 Websocket 什么是websocket? 首先来了解一下什么是websocket WebSocket全双工通信协…

2023-2-16 刷题情况

神经网络 题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。对神经网络的研究一直是当今的热门方向,兰兰同学在自学了一本…

Airtest自动化测试工具介绍

官方网站:http://airtest.netease.com/ Airtest IDE: 跨平台的UI自动化测试编辑器,适用于游戏和App,详细参见官网文档:http://airtest.netease.com/docs/cn/index.html 这是Airtest测试工具标配的IDE,目…