get/post/put/delete 形象区分

作者:pw
链接:https://www.zhihu.com/question/27622127/answer/37676304
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

关于技术上的问题可以看 RFC,楼上都说的很好了。说一些个人的看法,非技术层面上的,一个 API 何时用 GET、POST 甚至 PUT 请求。

首先引入一个副作用的概念,副作用指当你发送完一个请求以后,网站上的资源状态没有发生修改,即认为这个请求是无副作用的。比如注册用户这个请求是有副作用的,获取用户详情可以认为是无副作用的。

再引入一个幂等性的概念,幂等是说,一个请求原封不动的发送N次和M次(N不等于M,N和M都大于1)服务器上资源的状态最终是一致的。比如发贴是非幂等的,重放10次发贴请求会创建10个帖子。但修改帖子内容是幂等的,一个修改请求重放无论多少次,帖子最终状态都是一致的。

唠叨了这么多,回过头来,何时用 PUT POST GET DELETE:

GET:无副作用,幂等
PUT:副作用,幂等
POST:副作用,非幂等
DELETE:副作用,幂等

这么看的话,DELETE 和 PUT 请求好像毫无区别。为了进一步区分这些请求方式的应用场景,我们再引入一个技术特性,request body,就是大家广为流传的 "POST 请求传输数据量比较大“ 这一说法的来源。POST/PUT 请求可以通过传递 request body 来发送大量的数据,而 GET/DELETE 不能。

所以上面的表格需要再加一项:

GET:无副作用,幂等,不可带 Request Body
PUT:副作用,幂等,可以带 Request Body
POST:副作用,非幂等,可以带 Request Body
DELETE:副作用,幂等,不可带 Request Body

最后,以上所有内容都来自于团队的工作经验,团队一开始参考过 restful 那篇论文以及 RFC,,有可能有些地方说的比较山寨,欢迎考据党考据下 RFC 来反对我
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值