【发布时间】:2020-02-12 20:35:25
【问题描述】:
在 REST API 中,当我想更新实体的所有属性时,就良好实践而言,使用什么更好? PUT 还是 PATCH?如果使用PATCH 更好,为什么需要PUT?两者有什么区别?
如果所有字段都更新了,那么这两个操作都是幂等的,对吧?那么,有什么区别呢?
【问题讨论】:
-
您评论的帖子没有回答我在这里提出的问题。我问的是实体的所有字段都更新的情况,包括 PUT 和 PATCH。如果使用这两种方法更新所有字段有什么区别?
-
没有实质区别。您的所有数据字段都已更改。但是您最初的问题询问什么是“良好做法”,如果您要替换实体的全部内容,那么 PUT 被认为是正确的 HTTP 方法。在您的情况下,PATCH 是幂等的,但这并不意味着它在所有情况下都是幂等的。我相信链接问题中的详细答案仍然适用。
-
@BryanLewis 对不起,也许我表达得不好。想象一下,我确实允许部分修改。在部分修改的整个子集中也是对实体的所有元素的修改。这就是原始问题的情况发生的时候。如果我有一个更新表单并且只修改一个属性,我使用 PATCH,但如果我全部修改,我必须使用 PATCH 还是 PUT?我应该检测到这种情况并从 PATCH 切换到 PUT 吗?
-
当您在客户端拥有此“更新表单”时,您是否真正检测到哪些字段正在更改并专门针对这些字段进行修补?如果您不是,并且您通过网络发送整个实体,那么它实际上是一个 PUT。如果您的代码逻辑只发送更改,并且有时这些更改包含实体的所有字段,那么我同意您可以坚持使用 PATCH 处理所有内容,而不必担心动态更改 HTTP 方法。