当前位置:  开发笔记 > 后端 > 正文

如何提交RESTful部分更新?

如何解决《如何提交RESTful部分更新?》经验,为你挑选了2个好方法。

Samful Ruby,"RESTful Web Services"的作者似乎反对使用HTTP PUT进行部分更新:http://intertwingly.net/blog/2008/02/15/Embrace-Extend-then-Innovate

什么是不明确的部分是如何更新应该发生.正如我在博客底部附近评论的那样,目前尚不清楚使用HTTP PATCH比使用针对HTTP PUT的"补丁文档"更好.

值得注意的是,尽管Sam出来反对滥用HTTP PUT,但他似乎并不主张使用HTTP PATCH.

如何提交RESTful部分更新?



1> Darrel Mille..:

从您引用的博客文章中的评论中可以看出,没有达成一致的方式来进行部分更新.如果Sam Ruby,Joe Gregario,Mark Nottingham,Mark Pilgrim,BilldehÓra等重量级人物无法达成协议,我们有什么希望.

就我而言,我不会太担心.创建适合您的部分更新媒体类型,使用PATCH指示您的意图以及最终在通用媒体类型上达成协议时,将服务器更改为接受这两种格式.

要感谢如果你的REST api提交的最严重的罪行是滥用PUT/PATCH那么你做得很好.



2> Jørn Wildt..:

现在是2013年-你应该对部分更新使用PATCH -无论是使用JSON-补丁(见http://tools.ietf.org/html/rfc6902或http://www.mnot.net/blog/2012/09/05/patch)或xml-patch文档(参见http://tools.ietf.org/html/rfc7351).在我看来,json-patch最适合您的业务数据.

使用JSON/XML补丁文档的PATCH具有非常严格的前向语义以进行部分更新.如果你开始使用POST,与原文件的修改后的副本,对部分更新你很快就会碰到您想缺失值(或者说,空值)问题表示无论是"忽略此属性"或"此属性设置为空值" - 这导致了一个被黑客入侵的解决方案的兔子洞,最终将导致你自己的补丁格式.

你可以找到一个更深入的答案在这里:http://soabits.blogspot.dk/2013/01/http-put-patch-or-post-partial-updates.html.

更新:这是RPC吗?

好吧,如果您将RPC定义为向服务器发送命令,那么任何和所有HTTP操作都是RPC调用 - 无论您获取资源,PUT新表示还是再次删除它 - 每个操作都包含一个发送命令(动词)GET/PUT/DELETE等和可选的有效负载.只是发生了HTTP工作组(或者曾经是谁)引入了一个新的动词PATCH,它允许客户端对资源进行部分更新.

如果除了将完整表示发送到服务器之外的任何内容都被视为RPC样式,则根据定义,部分更新不能是RESTful.人们可以选择这种观点,但网络基础设施背后的人说的不同 - 因此为此目的定义了一个新的动词.

RPC更多地是通过HTTP以一种对Web上的中间人不可见的方式进行隧道方法调用 - 例如使用SOAP来包装方法名称和参数.这些操作是"不可见的",因为没有标准定义有效载荷内的方法和参数.

将此与PATCH与媒体类型application/json-patch进行比较 - 操作的意图对于Web上的任何中介都清晰可见,因为动词PATCH具有明确定义的含义,并且有效载荷以另一个定义良好的公共可用格式编码通过网络上的共同权威(IETF).最终结果是每个人的完全可见性,没有特定于应用程序的秘密语义.

REST也是关于"偶然重用"的,这正是应用程序/ json-patch的PATCH - 重用现有标准而不是发明大致相同的应用程序特定协议.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有