如果 PATCH 可以做 PUT 可以做的一切,那么为什么还要存在 PUT?

问题描述 投票:0回答:1

如果 PATCH 可以做 PUT 可以做的所有事情,那么为什么还要存在 PUT 呢?

我对这个主题进行了很多研究,我能够知道两者之间的基本区别。

PUT 用于创建或更新/替换现有的。我们需要把全身送到这里 PATCH 仅用于更新某些字段,例如这里我们仅发送需要更新的字段。

但是如果我们在 PATCH 中发送整个主体,那么它的工作方式与 PUT 完全相同...因此,在 PATCH 的帮助下,我们也可以更新一些项目,并且我们可以更新整个资源..那么为什么 PUT 甚至存在?

只能使用PATCH吗?不需要 PUT 方法吗?或者我错过了什么吗?

rest patch put
1个回答
0
投票

如果 PATCH 可以做 PUT 可以做的所有事情,那么为什么还要存在 PUT 呢?

POST 可以做 PUT、PATCH、GET、HEAD、DELETE.... 可以做的一切;为什么存在这些其他方法?


答案是这样的:当我们约束消息语义(含义)时,引入使通用组件更强大的能力,因为它们可以作用于附加约束引入的属性。

对于您的具体问题:PUT 意味着 PUT - 也就是说,它传达了我们打算将目标资源的当前表示替换为请求内容中包含的表示。

并且这个含义从根本上来说是幂等的;通用组件(例如:浏览器)可以利用这一点,例如,如果响应丢失,则重复请求。

相反,PATCH 的语义不是幂等的 - 没有理由期望两次应用相同的补丁文档会产生与应用一次补丁文档相同的结果。


此外,从历史上看,PUT 存在第一个;它出现在 RFC 1945(1996 年 5 月)的附录 D 中,并成为 RFC 2068(1997 年 1 月)中 HTTP 1.1 核心集的一部分。

HTTP PATCH 由 RFC 5789(2010 年 3 月)标准化。

请记住,HTTP-wg 努力确保 HTTP 向后兼容;即使 PATCH 使 PUT 完全无关(事实并非如此,见上文),我们可能会继续将其包含在标准中,以避免破坏当前使用它的所有内容。

当 GET-with-a-body 标准化时,我们可能会看到相同的选择; GET 不太可能被弃用。

© www.soinside.com 2019 - 2024. All rights reserved.