问问关于幂等的问题

2016-12-08 09:10:53 +08:00
 twogoods
/t/325814 ,这个里的问题可以说是一个幂等问题吗?生成订单的接口按理说用户请求自然要生成订单啊。能举个非常棒的需要幂等的例子吗?看过一个点赞的例子说点几次都相当于点一次,点多次你是都提示它成功还是提示已经点过了?
2944 次点击
所在节点    程序员
11 条回复
yuankui
2016-12-08 09:18:32 +08:00
我们说幂等的时候,都有一个隐含前提:
一个消息(或者请求)有一个标识字段类唯一地标识这个请求。

拿点赞的例子,这个唯一地标识就可以是: 帖子 ID + 点赞人 ID
拿下单的例子,可能就是订单号

如果没有这个标识,就要想法创造这个标识

没有标识你来说幂等?天方夜谭啊
crossoverJie
2016-12-08 09:19:15 +08:00
正好我现在正做一个幂等的业务:一个商户接入我们的系统首先要他传一个订单过来,之后我们这边会判断这个订单是否存在,如果不存在就创建该订单,因为这个业务是创建订单之后会有一个 step 状态,第一次创建状态就是 0 也就是新建。如果存在的话就返回该订单所在的 step 状态。之后这个 step 状态会在运营的接入下进行更新,每次商户如果需要查询订单状态的话也会反复请求我这个接口然后返回信息给他,不知道明白了没有,这是我所理解的。
enenaaa
2016-12-08 09:21:50 +08:00
比如 get 一个静态文件, 比如你点感谢, 就算你手动发 n 次感谢的请求, 也只算一次。
kaneg
2016-12-08 09:43:39 +08:00
个人理解幂等是对于只读的资源的请求,无论多少次请求都不会对该资源造成影响,比如 get 。而对于带写操作的请求,比如 post , put , delete 都不是幂等的
lhbc
2016-12-08 09:51:47 +08:00
从购物车创建订单就可以保证幂等了。
购物车数据提交到服务器保存,创建订单后删除购物车里的相应商品,重复提交就不会产生多个订单。

post, put, delete 都可以幂等,看你程序是否实现
比如 v2 对某个回复或帖子感谢
tinyproxy
2016-12-08 10:04:04 +08:00
@kaneg POST 等也有幂等,不管请求 n 次,对应的业务逻辑代码只执行一次
liuxu
2016-12-08 10:35:10 +08:00
wubotao
2016-12-08 10:45:49 +08:00
我看成了「关于杨幂的问题」。。。 😄 😄 😄
twtiyb
2016-12-08 16:56:57 +08:00
幂等。。执行一次,执行多次。效果一样。
ihuotui
2016-12-08 21:35:51 +08:00
还有一种情况是,幂等是有时效性,各大网站的缓存,就是一定时间内幂等。
SoloCompany
2016-12-09 03:04:24 +08:00
幂等不仅仅是描述事务,还包括行为
比如,按 ID 删除是典型的幂等操作
如果 API 设计为,删除成功返回 true ,记录不存在返回 false
那么这个 API 接口就不是幂等的
幂等的接口要求不管多少次调用,返回状态都无法区分

所以,防止多次提交和幂等并不完全是一回事,但幂等操作肯定不存在重复提交问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/326083

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX