接口的幂等性

一、什么是幂等性?

在数学里,幂等有两种主要的定义。

  • 在某二元运算下,幂等元素是指被自己重复运算的结果等于它自己的元素。例如,乘法下唯一两个幂等实数为0和1。
  • 某一元运算为幂等的时,其作用在任一元素两次后会和其作用一次的结果相同。例如,高斯符号便是幂等的。

在计算机领域,幂等性指多次操作对系统产生的影响与一次操作相同。举个例子,假设要删除用户A,无论请求多少次,操作结果都是删除用户A,而不会删除用户B。
在RESTful风格的接口中,幂等性表现在HTTP请求方法中:

  • GET
    幂等,即要获取用户A的信息,多次请求系统,返回的皆是用户A的信息。是返回结果相同而不是返回内容相同。
  • POST
    非幂等,用户注册,多次调用接口,会新增多条用户数据。
  • PUT
    幂等,put请求与post的区别是,post请求倾向于新增数据,而put请求倾向于更新数据,如果数据不存在则会根据客户端提供的完整数据资源创建数据。所以对于put操作来说,多次调用接口产生的结果是一样的,即客户端提交的数据都会被更新到系统中。
  • PATCH
    非幂等,patch是对put的补充。顾名思义patch即补丁,用于更新子资源的部分内容,同样地,如果要更新的数据不存在则允许创建数据。可以发现patch和put非常相似,那为什么put是幂等的,而patch非幂等呢?因为patch允许根据客户端提供的某个值动态计算更新内容,例如每次调用某个参数+1,则多次调用会产生不同结果。

二、接口中的幂等性

无论是微服务中各个子系统相互之间的调用,还是客户端对服务端的调用,都存在网络延迟等问题,会导致重复请求接口,这时候接口就需要支持幂等性,来防止出现问题。
最经典的一个例子就是订单支付操作,假如因为网络问题等因素导致用户重复提交,这时候不可能对用户重复扣款,否则客服电话就要被打爆了。
那么服务端接口对于幂等性应该如何支持呢?有如下两个思路:

1. 逻辑判断处理
支付时对订单状态进行判断,如果该订单已支付,则不应该再次进行扣款操作。

2. 请求带ticket
异步请求获取ticket,此ticket是唯一并且一次性的,保存在页面中,每次发起支付请求都带上ticket,后端检查ticket,若支付成功则删除ticket,这样就算重复提交也不会导致重复扣款。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350