【问题标题】:Correct HTTP method for RESTful create-or-update?RESTful 创建或更新的正确 HTTP 方法?
【发布时间】:2021-05-18 22:08:20
【问题描述】:

我正在创建一个允许我按名称导入文档的 RESTful Web 服务。我会使用这样的路径导入文档:

/documents/frequently-asked-questions

如果文档不存在,它将创建一个新文档;否则,它只会覆盖现有文档。

我的问题是这是否是 RESTful 服务的错​​误端点。通常我会使用 POST 进行创建,使用 PUT 进行更新。这里事先不知道文档是否已经存在。如果这是合理的,那么最好的 HTTP 方法是什么?如果不正确,那么有什么更好的方法?

【问题讨论】:

    标签: web-services rest


    【解决方案1】:

    HTTP 1.1 规范对 POST 的规定:

    9.5 发布

    POST 方法用于请求源服务器接受请求中包含的实体,作为 Request-Line 中 Request-URI 标识的资源的新下级。

    对于 PUT:

    9.6 放置

    PUT 方法请求将封闭的实体存储在提供的 Request-URI 下。

    鉴于这一点,而且 PUT 是幂等的,而 POST 不是,PUT 似乎是您创建和更新的合乎逻辑的选择。

    来源: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.2

    【讨论】:

    • 我同意,并补充说 WebDAV 是解决问题集的现有解决方案,它也使用 PUT。
    【解决方案2】:

    这是我使用 POSTPUT 的盐测试:

    大致思路是POST用于创建,PUT用于更新。但在创建或更新场景中,它们都适用。这里的关键是你已经知道资源的 ID

    所以...

    如果URL 包含文档的标识符,则使用PUT,否则使用POST

    在您的情况下,标识符是已知的,并且在 URL 中,所以使用 PUT

    【讨论】:

      猜你喜欢
      • 2012-11-28
      • 1970-01-01
      • 2011-02-16
      • 2015-07-30
      • 2016-05-26
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      相关资源
      最近更新 更多