Http 的 PUT 和 POST 如何分清?
从功能上看,它们都能更新和新增。 怎么才能正确的区分使用场景呢。
从功能上看,它们都能更新和新增。 怎么才能正确的区分使用场景呢。
还不如一个接口唯一用途,post 的接口数据少你拿 get 传我们也认,反之亦然
OPTIONS + POST 打天下。
写 post
读 get
删 delete
其他得不解释,而且使用 delete 之前还特意和客户端沟通说没问题。
post:向服务器增加数据
put:修改服务器已有数据
del:删除服务器已有数据
在我的理解中,幂等不代表每次请求的响应内容相等,而是指重复一个请求对服务造成的后果是相等的。简言之就是这个请求是可以重试的。
其它没法分的通通都扔到 POST 里,例如 Login 、SendEmail 这种的。
PATCH 基本不用,因为 PATCH json 处理起来稍微麻烦点。
用 Github starred 请求来举例,这个操作就是典型的 PUT 操作,因为你对一个仓库请求 N 次,业务逻辑也都是 starred 。想要取消,需要请求 DELETE 方法的 starred 接口。
假如 Github 不按照上面的业务逻辑设计,而是改为“你对一个 starred 仓库再次请求,会取消 star”。基于这个业务逻辑,starred 接口就要设计为 POST 。
但可能我重试了 N 次之后,N+1 次被服务器拦截了,它认为我是恶意攻击,这与业务逻辑无关,只是从安全性上考虑,也与 HTTP method 语义无关。
在我看来设计接口时更应该考虑的是接口的安全性与幂等性,很明显,这个操作即不安全也不幂等,所以 POST 最合适。