REST 的 HTTP 修改动词?

标签 http rest http-headers

据我所知,没有 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/

相关文章:

asp.net - 从 Firefox 扩展到 ASP.NET 的 http 发布

php - 使用 API 将发票过帐到 XERO

c# - 在 Web API 中返回特殊的 ASCII 字符

c# - 尝试使用 WebRequest 调用 WCF 服务

java - 版本控制 REST API 和供应商特定的内容类型

javascript - HTML5音频元素发送2次http get请求

python - 为什么我看到 Python BaseHTTPServer 出现随机读取错误?

java - 无法将 JSON 数据发布到 Jersey Restful Web 服务

node.js - Express.js - 如何为所有响应设置标题

用于下载文件的 PHP 脚本在 IE 中不起作用