【问题标题】:HTTP REST conventions : POST, PUT or PATCH?HTTP REST 约定:POST、PUT 还是 PATCH?
【发布时间】:2017-08-22 07:59:21
【问题描述】:

我有一个实体,我需要更改它的状态以停用它。这个停用过程也会触发对其他相关实体的一系列操作(不是 cronjobs)。

我以这种形式保存了 API url:

https://<base_url>/version/<entity_name>/<entity_id>/deactivate

这是我的问题:它应该是 POST、PUT 还是 PATCH 请求?

他们每个人的论点:

1) 发布:http://restful-api-design.readthedocs.io/en/latest/methods.html#actions

2) PATCH :因为我们不合时宜地改变了这个实体和其他一些相关实体的一些属性。因此补丁。

3) PUT:我的一位同事说它应该是 PUT。

【问题讨论】:

    标签: rest http


    【解决方案1】:

    首先要了解的是POST是好的;多年来,我们一直在 html 表单中使用 POST,它完成了工作。

    PUT 和 PATCH 是向远程系统传达更改的替代方法。考虑远程创作;基本思想是我的通用编辑工具发送一个 GET 来获取资源的当前表示,允许我对其进行更改,然后发回一个新的表示。

    如果返回的表示是包含我编辑的完整副本,那么我的创作工具应该使用 PUT。如果返回的表示只是补丁,那么创作工具应该使用 PATCH。

    注意:我的创作工具是通用的;据它所知,它正在与文档存储进行通信。因此,在定义 API 时,您的工作就是伪装成一个文档存储。

    停用实体的实际工作是在“文档存储”中操作集成资源的副作用

    因此,如果您愿意,实体的当前状态可以用一个文档来表示,如果有人将实体状态更改为“停用”的文档副本发回给您,那么您可以使实体。同样,如果他们向您发送 PATCH,正文中的说明告诉您将第 7 行从激活更改为停用,那么您可以执行相同的操作。

    只要您符合 RFC 7231 中描述的 POSTPUT 的语义,或者 RFC 5789 中描述的 PATCH 的语义,这些选择都很好:PUT 需要是幂等的,PATCH 需要是原子,等等。

    【讨论】:

      猜你喜欢
      • 2012-07-18
      • 1970-01-01
      • 2019-07-18
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 2017-01-05
      • 2018-01-08
      相关资源
      最近更新 更多