从I understand开始,PUT请求发送整个对象,而PATCH请求只发送diff,用于更新数据库中的对象。
为什么要在PATCH上进行PUT? PATCH似乎很多更轻。我没有看到PUT的任何好处(我确定它们存在,我只是不知道它们是什么)。
答案 0 :(得分:2)
更好的方法是PUT 替换资源,而PATCH则用于提供更改资源的指令。
替换资源始终是一种安全且幂等的操作,因为它不依赖于资源的现有状态。同时,更改资源的请求可能取决于该资源的状态,因此可能会产生其他影响。
HTTP PATCH谓词在RFC 5789中定义,其中声明:
PUT和PATCH请求之间的区别反映在 服务器处理封闭实体以修改资源的方式 由Request-URI标识。在PUT请求中,包含的实体 被认为是存储在该资源上的资源的修改版本 原始服务器,客户端请求存储的版本 被替换。但是,使用PATCH,随附的实体包含一个集合 描述资源当前如何驻留在 应修改原始服务器以生成新版本。 PATCH 方法会影响Request-URI标识的资源 也可能对其他资源产生副作用;即新资源 可以通过应用a来创建或修改现有的 PATCH。
接着说:
PATCH既不安全也不是幂等
答案 1 :(得分:1)
您可能希望创建资源,或者可能没有适用的PATCH格式(想想二进制文件)。
答案 2 :(得分:0)
是否仍然需要在API中提供PUT端点?
Maybe I don't want to take the diff and deduce where I should save it so that everything makes sense. Maybe I just want to work with full resources instead of messing around with little parts of them.
>>您也可以使用PATCH进行全面更新,不是吗?
答案 3 :(得分:-1)
HTTP标准的相当一部分已经过时,因此PATCH可以完全取代PUT也就不足为奇了。
在RESTful API中,人们经常误认为PUT是“更新整个资源”,但实际上PUT的语义是“替换资源”。不幸的是,HTTP中有一个可悲的设计:PUT被定义为在不存在新资源时创建新资源,因此PUT有时被用作POST的幂等替代品。
PATCH在某种程度上是对PUT的模仿,因此它也包含了POST的部分职责。但是,如果只想执行“修改现有资源”的操作,则只需要使用PATCH(PATCH不是幂等的,这是HTTP的另一种可悲的设计)。
深入研究REST和HTTP标准方法的人最终会发现,简单的RPC接口可以更好地实现您所需的所有操作。