我知道这可能是关于这个问题的一个主题,但我无法找到我的具体问题的答案。
我们有一个内部讨论是否在我们的休息服务中使用PUT进行更新。我们同意使用PUT有偏好。但是,PUT需要是幂等的。这是否意味着我们应该根据其幂等性将POST和PUT谓词混合用于不同的更新路由?
作为一个具体的例子。我们有更新路线,更新,让我们说一个“汽车”。对于此更新路由,您可以(除其他外)传递超链接。此超链接将在保存时获得ID,并将链接到更新的汽车。但是,每次在汽车上更新时,超链接的生成ID都会有所不同。这是否意味着更新不再是幂等的?即使超链接的实际目标是相同的?
如果是这样,我们应该使用POST动词进行此更新,而不是PUT动词。但是,我们有许多其他更新路由是幂等的。它们应该保持PUT吗?我相信这对服务的消费者来说会变得非常混乱。
简而言之:
答案 0 :(得分:1)
我与stackoverflow之外的人进行了一些讨论。我们得出以下结论:
理想情况下,我们会改变我们的代码(来自初始问题中的示例),以确保超链接的id不会改变。在这种情况下,不会讨论使用PUT或POST。如果我们不能这样做,我们将在API自述文件中写一个“免责声明”,以确保让人们知道某些PUT路由不是真正幂等的
答案 1 :(得分:0)
通常规则是,如果客户端知道它正在创建的资源的目标URI,则始终首选PUT
。 POST
在创建新资源方面很受欢迎,但主要是因为许多API想要确定目标URI(例如,如果您的数据库使用自动递增ID)。
答案 2 :(得分:-1)
使用POST创建实体和PUT(或部分更新的PATCH)来更新实体。
如果您的实体没有稳定的唯一标识符,表明您无法引用特定实体,那么您应该使用POST。