据我所知,没有RESTful方法可以对资源进行修改。为了做到这一点,你必须将资源作为一个整体,覆盖以前的表示。我认为这是问题的根源,特别是当资源具有大的表示时。
我相信这暗示了HTTP1.1中缺少动词:类似于MODIFY或PATCH。甚至连WebDAV都没有这个动词(它有PROPPATCH,其概念类似,但不适用于资源)。
当前的HTTP 1.1动词集对现实世界的REST还不是很有限吗?
修改:我在IETF找到了有关PATCH动词的提案
http://tools.ietf.org/html/draft-dusseault-http-patch-15
此规范定义了新的 HTTP / 1.1 [RFC2616]方法PATCH 用于申请部分 对资源的修改。
需要一种新方法 提高互操作性并防止 错误。 PUT方法已经存在 定义为覆盖资源 有一个完整的新身体,不能 被重用来做部分改变。 否则,代理和缓存甚至 客户和服务器可能会得到 混淆了结果 操作。 PATCH被提到了 早期的HTTP规范,但不是 完全定义。
据我所知,这种动词的唯一问题是缺乏幂等性。
修改:截至2010年3月,RFC 5789存在(PATCH Method for HTTP)。
答案 0 :(得分:8)
您可以将资源划分为可单独更新的子资源。
E.g。您有一个 / user 资源代表您可以创建 / user / email 子资源的用户帐户信息,然后在其上执行PUT以仅更新电子邮件。
答案 1 :(得分:7)
您可以使用POST进行部分更新。它并不理想,但它相当RESTful。
答案 2 :(得分:2)
有充分的理由没有这样的动词来做到这一点。管理几乎是不可能的。想想100个客户以这种方式修改相同的资源,你怎么知道你的修改到底在哪里?如果订单很重要,并且你的“补丁”实际上是在另一个“补丁”之后添加的,那么你现在要添加的内容实际上不是添加的内容。将PUT与ETag标头一起使用是一种更为理智的方法来修改资源,然后尝试将一些新动词与未知结果混在一起。实际获得资源是一个很小的代价,可以为可重复的结果付出代价。
答案 3 :(得分:1)
我希望有像......这样的标准化和支持的动词。