Dara Obasanjo 写了一篇关于 Google Data API 作为一个通用的协议(Google 关于 Atom Publishing Protocol 的实现和一些扩展)的不足,并解释了 Microsoft 为什么无法支持 GData 或把 GData 作为标准的理由。
在简短的把 GData 称赞为“简单和一致的接口”之后,Dare Obasanjo 叙述到“ GData/APP 作为一个通用的 Web 编辑协议是不妥的”。根据 Obasanjo 的说法“当你不局限于这些协议的设计初衷,即只为了编辑 Blog 这样的情况下,某些在 Atom Publishing Protocol 中的限制变的十分明显”。然而,Microsoft 虽然没有提供对 GData 的支持,但提供了“类似 REST 的一种标准协议”,对于 Microsoft 的协议,Dara Obasanjo 没有点名也没有讨论,不过他答应未来会发帖子进行讨论。
他指出了如下的限制:
数据模型不匹配,源于它们不是微内容:Atom 的数据模型非常适合表述人为创造的内容或者微内容(译者注:用户所生产的任何数据都算是微内容),在诸如 Blog 日志、链接列表、Podcast、在线相册和日历事件这样的 Web 应用中。当表述“一个具有特殊结构的业务对象”的时候,组成 Atom 条目的大部分元素没有意义。第二,一个人不得不创建大量的专有扩展元素来注释 atom:entry 元素,以便处理业务对象中所有特定的字段。这就像,在一个圆形的孔里面试图去适应一个方形的木栓。如果你强行去弄,有可能会适合,但却要命的难看。 缺乏对条目字段粒度更新的支持:每个客户端需要自己负责确认在被下载的原始 atom:entry 元素中没有丢失任何 XML。第二个问题就更严重,需要关心谁阅读了可编辑 Web:通过无条件的签出来检查丢失更新的问题。如果条目在客户端下载后和试图提交改变之前被更改过,这个问题会引起数据丢失的情况。即使客户端在提交更改之前发出一个 HEAD 请求来比较 ETag,也总是有可能更新发生在 HEAD 请求之后。在某个点之后,有可能出现“最近更新获胜”是合理的,这是因为现存的解决冲突的算法过于简单。不幸的是,这种方法也同样是失败的,由于 Atom Publishing Protocol 让客户端程序负责在 atom:entry 中的所有内容(的处理),即使它们只是感兴趣一个字段。
层级不足的支持:Atom 数据模型是不能直接支持嵌套或层级的。你能拥有媒体资源或者条目资源的集合,但条目资源不能自我包含条目资源。这意味着,如果你想重复一个具有子条目的条目,那么它必须通过一个连接来引用而不是包含在内部。通过连接来引用有时候是有意义的,比如当你考虑到 Blog 聚合和 Blog 编辑这样的情况,直接把所有评论包含在 Feed 条目中确实不是一个好主意。然而从另外一个方面来看,当条目具有一个直接的父子层级关系的时候,而子条目需要通过它自己的资源地址来定位,对于客户端来说总是显得麻烦,因为为了得到它们需要的数据而不得不进行两次或多次的调用。
Bill de hóra 对这个帖子进行了回复,并针对 Dare Obasanjo 提出的局限性提供了一些可行的解决方案。另外,他也添加了两个问题到限制列表中,“以便让人觉得他是多么可靠”:
更新的重新占用功能:一些客户端需要能够分片段上传数据。从较差的用户体验和通常的带宽消耗来看,对于特定清单模型(更新的重新占用功能)是重要的;不那样的话,数据消费端就不得不关注每次失败的数据上传。APP 根本不能说支持这些功能;通常情况下利用 HTTP 是可以做得到的,但是为了得到像样的客户端支持,至少需要提交为 RFC 标准。 批量和多部分上传:这个特性已经被考虑,atom 语法工作组已经开始着手此事了。(需要这个特性的)原因是成批传送消息(即所谓的“boxcarring”)能带来意想不到的复杂处理方式。那就是,仅仅说“发送一堆条目”,简单得让人感觉有些靠不住。尽管如此,这个特性在未来,从某些方面看还是值得关注的。
James Snell 和 Joe Gregorio 明显不同意这样的说法,他们指出,Dara Obasanjo 提出的缺点完全不是缺点。James 把 Dare 的帖子称作“无聊”,Joe 问道:
使我怀疑他对于 APP 抱怨的时间是在 APP 将要获得 RFC 认可的时候。是什么原因突然让他说起葡萄酸来了?
Google 已经明确地提供了一个简单而有效的 API 来访问他们的服务。他们表示,不想百分百地解决所有的使用情况,而是提供一个确实简单和一致的 API 来满足主要的 80% 的情况。我们倒是想看看,Microsoft 为了提供一个针对 Web 的通用编辑协议(General Purpose Editing Protocol)而会提供一个什么样的 RESTful 协议。
查看英文原文: Google GData/Atom Publishing Protocol too limited for Microsoft - - - - - -
译者简介:朱永光,IT 自由人和环境保护者,微软最有价值专家(MVP)和 MCSD。他有 14 年的编程实践经历,5 年软件构架和开发管理经验,擅长微软相关技术和产品,目前主要关注软件构架和开发框架,是成都.NET 俱乐部副主席和核心讲师,个人博客为 http://redmoon.cnblogs.com 。现在他作为共同创始人经营着一家环境保护技术公司。参与InfoQ 中文站内容建设,请邮件至 china-editorial@infoq.com 。
评论