在本系列中,将了解如何开始使用 Google App Engine (GAE)。在 第 1 部分 中,了解了如何设置开发环境,以便可以开始创建运行在 GAE 上的应用程序。还了解了如何使用 Eclipse 简化应用程序的开发和调试。在 第 2 部分 中,通过添加一些 Ajax 特性增强了该应用程序。还了解了在部署到 GAE 后如何监视该应用程序。本文是第 3 部分,将通过为应用程序创建 RESTful Web 服务返回到生态系统,这样其他人就可以使用它创建自己的 mashup。
GAE 是创建 Web 应用程序的平台。使用它的最重要的先决条件是具备 Python 知识,因为要在 GAE 中使用 Python 作为编程语言(目前为 Python V2.5.2)。对于本系列,具备一些典型的 Web 开发技能将会有帮助(例如,HTML、JavaScript 和 CSS 知识)。要针对 App Engine 进行开发,需要下载 App Engine SDK(请参阅 参考资料)。在本系列中,还使用 Eclipse V3.3.2 以辅助 GAE 开发(请参阅 参考资料)。并且需要 PyDev 插件以将 Eclipse 转换为 Python IDE。
|
到目前为止,我们的应用程序 aggroGator 允许用户聚合(mash up)多项常见 Web 服务并创建这些服务的聚合提要。现在,为了让事情变得有趣一些,我们希望允许用户订阅其他用户的提要(其中每个用户的提要可能是提要本身的聚合)。例如,假定需要设置一个帐户以在 Twitter、last.fm 和 del.icio.us 中订阅自己的提要,这样其他朋友随后可以订阅 aggroGator 提要以查看这些服务中的所有活动。要处理这种情况,需要再一次重新审视数据模型。
要启用订阅,需要允许一个用户(帐户)订阅其他帐户列表。我们可以采取的一种方法是向每个帐户中添加用户列表。每个用户将添加一个订阅。此操作的代码将类似清单 1。
清单 1. 带有
user
列表的 Account
模型
class Account(db.Model): |
这种方法有一些优点。检索帐户时,可以获得该帐户订阅的所有其他帐户。这是使用诸如 GAE 的 Bigtable 之类的非关系数据库的常见策略:把所有相关数据保存在一起并且无需担心标准化之类的事务。但是,这种方法有一个缺点。如果需要显示特定用户订阅了哪些人的提要该怎么办?这样做的惟一方法是检索所有 Account
模型,查看所有订阅,并查看给定用户是否位于列表中。另外,可以在每个 Account
模型中保存两张列表 — 一张用于 subscriptions
,一张用于 subscribers
。我们不会采取这种方法,而是使用更传统的多对多模型,如清单 2 所示。
清单 2.
Subscribe
模型
class Subscribe(db.Model): |
正如您所见,这个模型类似于关系数据库中的连接表(join table)。只是因为 GAE 使用非关系数据库(Bigtable)并不意味着您不能利用与关系数据库结合使用的技术。现在数据模型已经就绪,让我们详细查看如何从最终用户的角度创建这些多对多关系。
我们的应用程序可以存储订阅,因此只需要一种方法能够让用户创建订阅。为此,需要为用户创建一个用于添加订阅的页面(参见清单 3)。
清单 3. 帐户页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/ |
正如您所见,此页面只显示系统中的所有帐户。然后用户通过单击选择要订阅的帐户。您可以设想更复杂的界面。例如,如果存在大量用户,这样的界面将变得笨拙,因此基于搜索的系统将更好。或者使用一个系统,允许用户导入地址本或使用 OpenSocial 等应用程序中的 API 查找已经包含在应用程序中的现有朋友。以上模板需要一张用户列表,因此让我们快速查看为页面创建模型的控制器(参见清单 4)。
清单 4. 帐户页面控制器
本文转自IBM Developerworks中国