据我所知,没有 RESTful 方式来对资源应用修改。为此,您必须将资源作为一个整体 PUT,覆盖之前的表示。我认为这是问题的根源,特别是当资源具有很大的代表性时。
我相信这暗示了 HTTP1.1 中缺少动词:类似于 MODIFY 或 PATCH。甚至 WebDAV 都没有这个动词(它有 PROPPATCH,其概念相似,但不是针对资源)。
当前的 HTTP 1.1 动词集对于现实世界的 RESTing 来说是否太有限了?
编辑:我在 IETF 找到了关于 PATCH 动词的提案
https://datatracker.ietf.org/doc/html/draft-dusseault-http-patch-15
This specification defines the new HTTP/1.1 [RFC2616] method PATCH that is used to apply partial modifications to a resource.
A new method is necessary to improve interoperability and prevent errors. The PUT method is already defined to overwrite a resource with a complete new body, and can not be reused to do partial changes. Otherwise, proxies and caches and even clients and servers may get confused as to the result of the operation. PATCH was mentioned in earlier HTTP specifications, but not completely defined.
据我所知,这样的动词唯一的问题是缺乏幂等性。
编辑:自 2010 年 3 月起,RFC 5789 已存在 (PATCH Method for HTTP)。
最佳答案
您可以将资源划分为可单独更新的子资源。
例如你有一个代表用户帐户信息的 /user 资源,你可以创建一个 /user/email 子资源,然后对其执行 PUT 以仅更新电子邮件。
关于REST 的 HTTP 修改动词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1672025/