【发布时间】:2010-12-12 22:08:55
【问题描述】:
据我所知,没有 RESTful 方式可以对资源进行修改。为了做到这一点,您必须将资源作为一个整体,覆盖以前的表示。我认为这是问题的根源,尤其是当资源具有很大的代表性时。
我相信这暗示了 HTTP1.1 中缺少动词:类似于 MODIFY 或 PATCH。甚至 WebDAV 也没有这个动词(它有 PROPPATCH,其概念相似,但不是针对资源)。
当前的 HTTP 1.1 动词集对于现实世界的 REST 来说是不是太有限了?
编辑:我在 IETF 发现了一个关于 PATCH 动词的提案
https://datatracker.ietf.org/doc/html/draft-dusseault-http-patch-15
本规范定义了新的 HTTP/1.1 [RFC2616] 方法补丁 用于应用部分 修改资源。
需要一种新方法 提高互操作性并防止 错误。 PUT 方法已经 定义为覆盖资源 拥有一个全新的身体,并不能 被重用做部分改变。 否则,代理和缓存甚至 客户端和服务器可能会得到 对结果感到困惑 手术。 PATCH 在 早期的 HTTP 规范,但不是 完全定义。
据我所知,这种动词的唯一问题是缺乏幂等性。
编辑:截至 2010 年 3 月,RFC 5789 存在 (PATCH Method for HTTP)。
【问题讨论】:
-
我认为 PATCH 动词的真正问题是没有人完全确定在应用更新时使用什么媒体类型。如果您的表示是基于 XML 的,情况尤其如此。显然 XML 很难定义差异格式。
-
与此同时,RFC 6902 定义了
application/json-patch+json。有关详细信息,请参阅jsonpatch.com。
标签: http rest http-headers