Google 开发者日 2007 德国大会报道

  • Hartmut Wilms
  • 郭晓刚

2007 年 6 月 5 日

话题:Java.NETRubyGoogle语言 & 开发架构

Google 开发者日 2007在全球 10 个城市陆续举行,从澳大利亚的悉尼开始到美国加州山景城结束。以下是对其中 2007 年 5 月 31 日德国汉堡的活动中一些议程的报道。

在 Karl Krainer——Google 的北欧市场负责人——的开幕致词中,介绍了本次活动的各位演讲者和时间安排。随后他欢迎了 Stephan Uhrenbacher—— Qype的创始人。Stephan 介绍了他对Google Maps API的体会和这个 API 对 Qype 的影响。Qype 是一个给服务商、商店、餐馆以及所有其他在德国的公共场所和供应商评分的平台。Google Maps 是这个平台的一项关键技术,它被用来提供所有地点的地理信息以及用户查找的地点一定范围内的其他(相关)地点的信息。评级信息来自 Qype 用户提交的数据,这让 Qype 也成为一个社交平台。在被问到他希望 Google Maps 或者其他 Google API 增加哪些功能时,他回答说他对一项本地化功能非常关心,比如限制 Google Ads 只显示一些切合某个地点的广告条目。

Douwe Osinga是来自 Google 瑞士的一位工程师,他谈论了Google Gadgets API。Google Gadgets 是一些用 XML 文档形式实现的微型程序( applet)。Google 为 Gadgets 提供免费主机和一个 Gadgets 目录。Gadget 的 XML 文档可以包含 JavaScript 代码,这让程序能够实现非常多的操作,Google Data APIs 是其中之一。由 XML 和 JavaScript 构成的 Gadget 可以在几乎任何地方运行,也可以简单地通过博客和网站发布,让它得以迅速、大量地传播。 Gadget 的内部构造非常简单:文档的根节点“module”包含一个“moduleprefs”元素,若干“userpref”元素和一个“content”元素。Gadget 提供一些有趣的功能,比如:

  • 获取远程内容——获取并处理远程文本(通常是 HTML)、XML 和 RSS/Atom Feed 数据;
  • 国际化——Gadget 中的任何文本都可以放入消息资源包(Message Bundles)之中。Google 在运行时根据用户浏览器的语言设置获取相应的资源包;
  • 缓存外部资源——Google 为 Gadget 使用的任何外部资源提供缓存。

Frank Mantek是 Google 德国的员工,他探讨了Google Data APIs Protocol (GData)。他首先解释了为什么 Google 选择提供一个基于 REST 的 API。过去 Google 的 API 建立于 SOAP 之上,导致开发者不得不应付产品之间不相一致的“一堆 API 和规格书”。现在 Google 为他们的服务提供了统一的 API,API 由一组四种操作、若干 URI 和 Atom/RSS feed 组成。根据 Frank Mantek 的说法这套工具已经被证明可行,它简化了开发,并且对大多数(> 80%)用途是足够的。仍然有一些需求需要更复杂的 API 才能满足,比如事务、消息级的安全以及通知——回复的消息交换模式,但这些只是少数。目前 GData 可以用来访问以下 Google 服务的数据:

Frank 引用Dare Obasanjo关于 GData 的意见来支持他对基于 REST 和基于 SOAP 两种方式的看法:

将这个(GData)跟 Yahoo! Developer Network 的 API 或者 Windows Live Dev 的一坨粘糊糊的不协调不兼容的 REST 风格的协议、SOAP API 和 XML-RPC 方法,都放到同一个屋檐下对比。在 Google 这边,一个可以从 Blogger 读写数据的程序只需要细微的修改就可以从 Google Calendar 或者 Picasa Web Albums 读写数据。而换成 Yahoo! 的两个服务(比如 Flickr 和 del.icio.us)或者两个 Windows Live 服务(比如 Live Search 和 Windows Live Spaces)情况就大不相同,即便来自同一家公司的两个服务都使用完全不一致的协议、对象模型和认证机制。

GData 通过 HTTP 谓词 GET、PUT、POST 和 DELETE 来支持对(用 URI 表示的)资源的 CRUD 操作。操作的结果用 Syndication Feed(Atom/RSS)的形式提供。 Atom 的元数据里加入了额外的扩展标签以满足 Google 服务的个别需要。查询和乐观并发也已经加入。乐观并发由“编辑链接(edit links)”实现。指向资源的每个链接(URI)都包含版本信息。这个版本信息随着每次更新自动调整。并发问题通过在每次更新或删除时比较所提交的版本信息和服务器上的版本信息来解决。

身份认证由 Google Desktop 或 Web Authentication Service 实现。两者都会创建一个认证令牌,可被客户程序用来鉴别单个用户的身份。Web Authentication Service 由相应的 Google 站点通过重定向掉用。两种方式都可以保持密码安全。

演讲还涵盖了一些其他开发者如何运用 Google Data APIs 的例子:

Frank 还提到了 Google Data API Protocol 的一些弱点,Google 将会在以后的版本中解决:

  • 身份认证——Web Authentication Service 是通过重定向调用的,导致用户要离开客户程序并被带到一个可能看上去完全不同的用户界面之前。很多客户都对此有所抱怨。
  • 乐观并发——编辑链接不是一个很干净的解决方案。Frank 说他们当初应该采用强ETags
  • 增量更新——现在没有办法做到增量更新,即改变资源的特定部分而不必发送整个新版本的数据。
  • 版本控制——这是一个悬而未决的问题。Google 还没有决定他们要如何处理 Google Data APIs 的版本,不过基本可以确定是通过提供一组新的 URI 来实现。旧版本可能在一段时间后下线。

Matthias Zenger是 Google 瑞士的 Tech Lead Manager,他谈论了Google Base。Google Base 为应用程序处理结构化的数据提供了一个平台。任何人都可以定义数据项的类型并提交数据项到库(base)中,以产生一个结构化数据的库,以便 Google Search 能够找到并适当地表示这些数据。

Google Base 的数据模型非常简单。Base 是一个数据项的仓库,它的结构是由数据项类型(item type)定义的。数据项类型由一组类型化的属性构成,属性则是一个名称 / 值的绑定。比如“Product”就是数据项类型的一个例子。它被Google Product Search(Froogle 的成功关键)使用。

Google Base 基于 GData 并增加了一些特定的扩展。对数据项的创建、读取、更新和删除的所有 CRUD 操作都被支持。当中还包括了通过" bq"查询参数实现的结构化查询,例如“?bq=[cuisine: asian][cooking time <= 45 minutes]”。Google Base Query 查询语言提供的标准化查询包括“[name(type) op value]”模式、专门的日期和地点查询、内建及定制的排序函数(成熟 SQL 的“order”)和分组表达式(SQL 的“group”)。

Matthias 以演示 Google Base 的范例项目其中之一Honda Certified Used Cars结束了他的演讲。

Google 开发者日的参与者们能够深入地了解最新的 Google 服务,以及这些服务的开发和用途。本次活动提供了丰富的信息以及开发者之间沟通和讨论的充分机会。GDD07 德国主页上还为没有机会参与此次活动的开发者们提供了现场的视频。

查看英文原文:Google Developer Day 2007
译者简介:郭晓刚是一名独立开发者。在经过了 10 年修练之后,总算是懂得一点编程了。目前主要关注以 Spring Framework 和 Hibernate 为主干的 Java Stack 和 Adobe Flex。Microsoft Office 的插件开发也是关心的方向之一。同时也在尽力做一些技术翻译工作,把知识分享给更多的人。参与 InfoQ 中文站内容建设,请邮件至china-editorial@infoq.com
Java.NETRubyGoogle语言 & 开发架构