为什么不允许HTTP PUT在REST API中执行部分更新?

谁说RESTful API必须通过HTTP PATCH单独支持部分更新?

它似乎没有好处。它增加了在服务器端实现的更多工作,以及客户端更多的逻辑来决定请求哪种更新。

我在使用HTTP创建REST API的上下文中提出这个问题,它提供了对已知数据模型的抽象。要求PATCH部分更新,而不是PUT全部或部分感觉,因为它没有好处,但我可以说服。

有关

http://restcookbook.com/HTTP%20Methods/idempotency/ – 这意味着您无法控制可能缓存请求的服务器软件。

What’s the justification behind disallowing partial PUT? – 没有给出明确的答案,只参考什么HTTP定义为PUt与PATCH。

http://groups.yahoo.com/neo/groups/rest-discuss/conversations/topics/17415 – 显示了对此的想法的分歧。

谁说?发明REST的家伙说:

@mnot Oy, yes, PATCH was something I created for the initial HTTP/1.1 proposal because partial PUT is never RESTful. 😉

https://twitter.com/fielding/status/275471320685367296

首先,REST是一种架构风格,其原理之一是利用其底层协议的标准化行为,所以如果你想通过HTTP实现一个RESTful API,你必须严格遵循HTTP RESTful。你可以不这样做,如果你认为它不足以满足你的需要,没有人会诅se你的,但然后你不做REST。您必须记录偏离标准的位置和方式,在客户端和服务器实施之间建立强大的联系,使用REST的重点是避免这种情况,并专注于您的媒体类型。

因此,基于RFC 7231,PUT应该仅用于完全替换表示,在幂等操作中。 PATCH应该用于部分更新,这不需要是幂等的,但它是一个很好,通过要求一个前提条件或验证当前状态之前使它们idempotent应用差异。如果您需要执行非幂等更新,部分或不是,请使用POST。简单。每个使用你的API的人都知道PUT和PATCH是如何工作的,希望他们能够这样工作,你不必记录或解释这些方法对给定资源应该做什么。你可以自由地使用任何其他你认为合适的方式,但然后你必须记录为你的客户,你必须找到另一个流行词你的API,因为这不是RESTful。

请记住,REST是一种专注于API的长期演进的架构风格。做正确现在将增加更多的工作,但将使变化更容易,更少创伤后。这并不意味着REST对于一切和每个人都是足够的。如果你的重点是易于实现和短期使用,只要使用方法,你想要的。如果你不想打扰客户选择正确的方法,你可以通过POST做一切。

http://stackoverflow.com/questions/19732423/why-isnt-http-put-allowed-to-do-partial-updates-in-a-rest-api

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:为什么不允许HTTP PUT在REST API中执行部分更新?