开放 Flickr API 让您可以将元素整合到 Project Zero 应用程序中
Flickr 照片共享服务是当今最流行的 Web 应用程序之一。它提供了具备优秀社会性网络的健壮托管服务,让上载、组织和寻找照片变得异常简单。这一切都很棒,但从一个开发者的角度来看,Flickr 最让人着迷的部分是其用来读写照片数据的公共 API。您可以借助任何编程语言通过 HTTP 发送 API 请求,而且现在也有很多开源项目涌现出来,可以针对各种语言封装此 API 。在本文中,您将了解如何通过提供可在 Project Zero 应用程序中轻松重用的 Groovy 绑定来 “Zero 化” Flickr API。学完本文后,只需几行代码即可从 Groovy 脚本读写照片数据。
开始之前
本文假设您已经下载了 Project Zero 并或者已经完成了 介绍性教程 的学习或者自己编写过简单的应用程序。该概览包括了如何获得 Flickr API 键的指令,这些都是测试本文中所提供的代码所必需的。
简介
Flickr 照片共享服务是当今最为流行的 Web 应用程序之一,它包括了一个公共 API,让开发人员可使用 HTTP 请求访问照片数据。Flickr 的 API 是 RESTful 的而且十分容易理解,但若想进行请求和读取响应,还需要执行一些乏味的步骤。本文展示了如何去除这些乏味的步骤并让 Zero 和 Flickr 间的通信简单到只需几行代码。本文还探讨了 Project Zero 几个有趣的扩展点。
用 Groovy 封装 Flickr API
读写照片数据的 Flickr API 的基础是以 HTTP 发送的消息和以 XML 或 JSON 为格式的数据结构。本文使用的是 JSON,因为它的数据结构(简单映射和列表)更容易从 Groovy 的角度处理。在本节,将会介绍如何使用 Zero 的全局上下文和 Groovy 的脚本为 Flickr 的 API 创建一些简单的包装器方法。
创建示例项目
要完成我们的 Flickr API “Zero 化”处理,需要创建两个 Zero 项目:一个针对用来与 Flickr 交互的 Groovy 代码,一个使用这些 Groovy 代码完成某些任务。第一个项目名为 zero.services.flickr,第二个项目名为 flickr.test。如果想要亲自编写代码,则可以使用清单 1 所示的 Zero 命令行创建这两个简单的项目:
清单 1. 创建测试项目
$ zero create zero.services.flickr
$ zero create flickr.test
为 flickr.test 编辑 Ivy 文件并在 zero.services.flickr 上添加一个依赖项。打开 /config/ivy.xml 并添加如清单 2 所示的 XML 代码行:
清单 2. 添加 Ivy 依赖项
<dependency name="zero.services.flickr" org="zero" rev="1.0+"/>
zero.services.flickr 项目并不需要额外的库或依赖项,因为 Flickr API 构建在 HTTP 和 JSON 基础上;我们将使用 Zero Core 所包含的 HTTP 和 JSON 库与 Flickr 通信并创建到实际图像文件的 URL。
调用 Flickr API
每个 Flickr 请求都需要一个方法名和一组参数集(参数集也可能为空)。响应作为 JSON 对象返回,JSON 对象除了所请求的数据外还具有状态属性(设为 ok 或 fail)。您可以充分利用这样一个事实,即 JSON 对象在 Groovy 中表示为简单的映射和列表并创建一个十分简单的 API 来发送请求和读取响应。让我们开始一个用例:您可能想让您的用户能用三四行代码即可发出 Flickr 请求,如清单 3 所示:
清单 3. “Zero 化” 的 Flickr API 原型 #1
def method = "flickr.photosets.getPhotos";
def params = [
photoset_id: 1234567890,
per_page: 25
];
def response = invokeMethod("flickr.groovy", "flickr");