Dare Obasanjo 对通过HTTP 访问数据库样式数据的两个新的协议进行了对比。这两个协议都基于REST,分别是 Google Base 和 Microsoft 的 Astoria 。
两个协议之间的基本概念都是一样的。在 SQL 里面使用 URL 指定查询。关系和过滤器必须被编码成 URL 的一部分,所有的查询都是 GET。
Dare 指出的第一个不同之处是,Astoria 使用层级格式表示关系。比如,要指定一个客户键值为 5 的订单列表,你需要使用像“/Customers[5]/Orders”这样的字符串。而 Google Base 则使用了一种普通的模式,在指定关系的时候必须使用类别和属性。
两者都支持过滤和排序,但是 Google Base 有更为丰富的语法和对跨所有类的全文查询支持。但是 Google Base 多少有些自作聪明,它还提供了对内联 If/Else 结构的支持。
Astoria 有一个非常棒的称之为 Expand 的属性。用这个属性用户可以同时指定请求数据的子节点,从而免除了需要执行 1+N 次查询以获得数据行和相关子行的集合。这些数据在合适的节点下以内联 XML 的形式返回。
在 Google Base 里面同样也有一些 Astoria 所不具备的特性。比如用户可以进行拼写检查,和 Google Search 的工作方式类似。使用 Crowd 属性还可以过滤重复的信息。在这个文章中,Dare 做了一个请求,“返回了所有储存在 Google Base 里面的餐馆,但每个菜的类型只显示两条记录”。
Dare Obasanjo 总结说:
在比较两个方法的过程中,有很多喜欢和不喜欢的特性。我喜欢 Astoria 里的 Expand 属性,因为可以从多个层级路径中提取 XML 结果。但是如果要获得更好的过滤结果,它还缺少一些必要的操作和函数。 对于 Google Base 的数据 API,我喜欢 Crowd 属性和在属性集里进行测试的一个完整的函数库。还有一些操作,比如在某位置附近查找结果等,尽管对于大多数 RESTful 协议并不是必须的。也就是说,我真的认为有些属性太“超前”了,比如在 URI 里面增加 if…else 块等。我怀疑谁会去用这些复杂的属性,如果它们只有层次,而不是一个需要复杂过滤才能获取数据的普通命名空间的话。
评论