【问题标题】:PUT or POST to update resourcePUT 或 POST 更新资源
【发布时间】:2016-03-02 08:50:28
【问题描述】:

我正在构建一个 Web 服务应用程序,我正在寻找有关如何更新资源的建议。

我有一个用户端点,它允许创建、修改和删除数据库中的用户。 我的问题与用户的更新有关。在表格中,我编写了 API 工作原理的架构以及我阅读的每个端点的描述。

existingEmailId 的 PUT 和 POST 似乎做同样的事情,因为 emailId 是资源的实际 ID。因此,对于这个端点,只创建一个端点是合适的,还是应该同时使用这两个端点?

任何建议将不胜感激。

【问题讨论】:

    标签: api rest post put


    【解决方案1】:

    POST 和 PUT 方法的根本区别在于 通过所附表示的不同意图突出显示。 POST 请求中的目标资源旨在处理 根据资源自身的语义封闭表示, 而 PUT 请求中的封闭表示定义为 替换目标资源的状态。因此,PUT 的意图 是幂等的并且对中间人可见,即使确切的 效果只有源服务器知道。

    -- RFC 7231

    如果您有权访问创建新用户所需的所有信息,包括任何相关的唯一 ID,那么您应该更愿意将完整的表示形式提交给服务器。我不会同时支持 PUT 和 POST - 为什么有两种方法可以做同样的事情?如果您稍后需要 POST 来执行其他操作怎么办?

    如果 PUT 生成新资源,则返回 201 Created,如果 PUT 更新现有资源,则返回 200 OK

    【讨论】:

      【解决方案2】:

      PUT 用于更新资源,因为 PUT 应该是幂等的。

      【讨论】:

        【解决方案3】:

        POST 应该用于插入新数据,而 PUT 应该用于更新。

        http://www.restapitutorial.com/lessons/httpmethods.html

        【讨论】:

        • 我一直在提到这个关于 SO 的另一个答案:它说的正好相反。 stackoverflow.com/questions/630453/put-vs-post-in-rest
        • 似乎对这个问题有点意见分歧。我认为与 PUT 被发送到 /email/some-email- 相比,关于 POST 被发送到 /email 的评论(例如)在不知道相关资源的情况下被发送到 /email- id,即 了解相关资源,是最痛苦的。
        猜你喜欢
        • 2017-12-26
        • 1970-01-01
        • 2011-01-13
        • 2023-03-21
        • 2014-04-04
        • 2012-08-25
        • 2020-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多