BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

合并,替换,还是补丁:Astoria如何应对变化的数据

| 作者 Jonathan Allen 关注 595 他的粉丝 ,译者 黄璜 关注 0 他的粉丝 发布于 2008年6月26日. 估计阅读时间: 2 分钟 | AICon 关注机器学习、计算机视觉、NLP、自动驾驶等20+AI热点技术和最新落地成功案例。

在使用REST时,当你执行一个PUT操作来更新已有的数据时会发生什么事?Astoria团队提出了这个问题,并给出了他们的答案。

当一个基于Astoria协议的web服务收到一个PUT操作的请求,它有两种方式可以来处理这个更新:或者替换掉原有的数据,或者将新的值与原来的数据进行合并。为了保持与AtomPub协议的兼容性,微软决定PUT应该对应于替换操作。

这显然使得如何表示合并操作成为了一个问题。可用的选项包括引入一个新的动词,MERGE,或者是一个新的定制报头。Pablo Castro写到,

虽然我们并不因引入了一个HTTP新方法很兴奋,但用额外的报头重载PUT却是非常成问题的。别的不说,假如一个服务器因不能通过报头来支持“合并”操作而将其当作了常规的“替换”请求并执行了这一操作,这绝对不是客户想看到的。同样,其它的东西也受到影响。例如,一个服务器获得了一个真正的MERGE请求但并不能处理它,它可以返回405-不支持的方法。

他们所考虑的另一个意见是PATCH操作。遗憾的是,在微软的代码冻结的时候,该规范还未能最终确定下来。这使微软陷入了进退维谷的境地,要么冒着与最终规范不兼容的风险使用PATCH,要么使用可能会过时的MERGE。鉴于第一个选择有可能损害客户或者造成与规范的不兼容,他们决定使用MERGE。

因为我们的话题是在客户端,需要注意的是.NET客户端默认就是合并语义。作出这样的选择是因为一个.NET客户端可能并不能知道服务器上所有的字段,而服务器无法区分哪些字段是故意空缺的和本来就未知。

AJAX客户端同样默认的是合并的语义。像.NET客户端一样,它们也有一个可选的参数来表明想要选择的是替换的语义。

查看英文原文Merge, Replace, or Patch: How Astoria Handles Changing Data

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT