POST vs PUT vs DELETE

时间:2018-02-21 12:18:13

标签: http

我从未真正理解为什么我需要PUT和删除请求方法。

在我的代码中,我一直在使用post,只需执行后端代码即可添加/删除内容。

我这样做错了还是可以一直使用POST?

我的例子:

  @RequestMapping(value = "/delete-images", method = RequestMethod.POST)
public @ResponseBody void deleteImages(@RequestParam("imageIDs") String[] imageIDs) {
    Docker.deleteImages(imageIDs);
}

2 个答案:

答案 0 :(得分:2)

REST的想法是,您以某种方式设计端点,表示您操作的事物的逻辑结构,然后使用HTTP动词来表示您正在执行的操作类型。

因此,举例而不是/get-image?imageId=X/delete-image?imageId=X个端点,你应该只有一个/image/X端点(注意缺少查询参数),然后是动词GET / PUT / DELETE编码您实际想要对图像执行的操作。

这种方法有很多优点(缓存,标准工具等),但有两点需要注意:

  1. 并非每个数据/操作都符合REST所需的此分层资源模型。试图挤压它可能会导致非常尴尬的API。 (一个不太合适的例子是批量操作。)
  2. 两件事(URL标识实际资源动词用于识别操作)协同工作,一个没有另一个没有意义。

答案 1 :(得分:1)

所有关于请求的语义。来自RFC 7231

  

请求方法标记是请求语义的主要来源;   它表示客户提出此请求的目的   以及客户对成功结果的期望。

以下是RFC 7231中定义的一些HTTP方法的简要说明(单击链接以检查完整的方法定义):

  • GET:转移目标资源的当前表示。
  • HEAD:与GET相同,但只传输状态行和标题部分。
  • POST:对请求有效负载执行特定于资源的处理。
  • PUT:用请求有效负载替换目标资源的所有当前表示。
  • DELETE:删除目标资源的所有当前表示