Http 的 PUT 和 POST 如何分清?

2020-12-30 11:13:22 +08:00
 leeraya

从功能上看,它们都能更新和新增。 怎么才能正确的区分使用场景呢。

4653 次点击
所在节点    HTTP
40 条回复
imgbed
2020-12-30 14:18:56 +08:00
API 的话,我全部用 POST,好像没什么问题
imdong
2020-12-30 14:27:07 +08:00
目前也就 post get delete,容易识别的。

写 post
读 get
删 delete

其他得不解释,而且使用 delete 之前还特意和客户端沟通说没问题。
charlie21
2020-12-30 14:28:22 +08:00
用 PUT 也可以没幂等性
litchinn
2020-12-30 14:32:31 +08:00
我理解的 Restful 是面向资源的,在 restful 中不应该使用`/user/add`等,所以 CRUD 对应的 URI 只有一个,例如`/user`,你新增都已经把 POST 用了,修改自然只能 PUT 了
tinyRat
2020-12-30 14:35:23 +08:00
看似前后端分离,接口用 post 梭哈。
leafre
2020-12-30 14:55:16 +08:00
都用 post
falcon05
2020-12-30 14:59:12 +08:00
restful 在实际应用各种变形,算了,post 一把梭
anmie
2020-12-30 15:41:17 +08:00
get:从服务器获取数据

post:向服务器增加数据

put:修改服务器已有数据

del:删除服务器已有数据
draguo
2020-12-30 17:38:50 +08:00
restful 看着很美好,实际使用不如都 post 方便
strongcoder
2020-12-30 21:02:43 +08:00
全部都用 post
tonyaiken
2020-12-31 00:40:58 +08:00
我们公司是严格按照语义的,内部也有指南。同事不按指南定义会被打回的。
xmumiffy
2020-12-31 02:17:07 +08:00
put 和 patch 才有语意的近似,put 全量修改,patch 部分修改。
至于 post 和 put,你把 post 当修改,那你用什么做新增?
ghostsf
2020-12-31 08:41:01 +08:00
严格按 restful 执行还是香的
baiyi
2020-12-31 09:07:13 +08:00
@Pastsong #7 GET 是安全的,所以一定是幂等的,绝大多数 GET 都应该是安全的操作

在我的理解中,幂等不代表每次请求的响应内容相等,而是指重复一个请求对服务造成的后果是相等的。简言之就是这个请求是可以重试的。
bsg1992
2020-12-31 09:25:11 +08:00
@baiyi 很难达到 N 次请求后 “对服务造成的后果是相等” 每次请求服务端 都会触发变更
h82258652
2020-12-31 09:50:41 +08:00
GET 只读,幂等
POST 新增,不幂等
DELETE 删除,幂等
PUT 修改,幂等

其它没法分的通通都扔到 POST 里,例如 Login 、SendEmail 这种的。
PATCH 基本不用,因为 PATCH json 处理起来稍微麻烦点。
baiyi
2020-12-31 10:25:48 +08:00
@bsg1992 #35 这个“对服务造成的后果是相等的“是基于业务逻辑的。

用 Github starred 请求来举例,这个操作就是典型的 PUT 操作,因为你对一个仓库请求 N 次,业务逻辑也都是 starred 。想要取消,需要请求 DELETE 方法的 starred 接口。

假如 Github 不按照上面的业务逻辑设计,而是改为“你对一个 starred 仓库再次请求,会取消 star”。基于这个业务逻辑,starred 接口就要设计为 POST 。

但可能我重试了 N 次之后,N+1 次被服务器拦截了,它认为我是恶意攻击,这与业务逻辑无关,只是从安全性上考虑,也与 HTTP method 语义无关。
julyclyde
2020-12-31 16:16:01 +08:00
POST 的那个网址一般是个程序
PUT 的一般是要上传的内容将来的名字
bsg1992
2020-12-31 16:49:46 +08:00
@baiyi
用手机验证码这个功能来说,按照 restful 定义他应该是一个获取资源的描述。
实际上来它涉及到了多个状态的变更,每一次的请求都会影响到改接口的内部处理逻辑和返回状态,他的接口风控也是基于业务要求来做的。
baiyi
2020-12-31 17:29:24 +08:00
@bsg1992 #39 应该从业务逻辑上理解接口,从而使用更合适的 POST 方法,而不是单纯的从“获取验证码”这个描述上理解。

在我看来设计接口时更应该考虑的是接口的安全性与幂等性,很明显,这个操作即不安全也不幂等,所以 POST 最合适。

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

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

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

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

© 2021 V2EX