首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

利用 Project Zero 和 REST 设计原理创建相册应用程序(1)

利用 Project Zero 和 REST 设计原理创建相册应用程序(1)

照片共享应用程序设计简介Yahoo! 的 Flickr 照片共享服务(参考 )是一个很好的 RIA 示例。由于 Flickr 具有其他 RIA 作者想要的许多特性,使用 Zero 重新创建这类应用程序,能够很好地证明 Zero 是一款开发 RIA 的优秀平台。幸运的是,我们无须从头创建整个照片共享服务 — Zero 平台包括许多 RIA 组件,例如,blog、评定系统、配置文件管理器等等,在构建您自己的应用程序时,所有这些组件均可重用。接下来的章节将讨论照片共享服务的本质,同时也会展示有了 Zero 中的这些组件后,这类应用程序的共同之处非常之多。      
Project Zero 社区
      请查阅 ,了解 Project Zero 如何提供功能强大 — 但异常简单 — 的 Web 应用程序开发和执行平台。这个活跃的  探讨项目开发、为开发人员提供帮助,而且非常乐意听取您的想法!

设计照片共享应用程序创建照片共享服务初看上去非常复杂,但如果静下心来仔细想想,就会发现这类应用程序有很多共同之处,它们都具有两个容易理解的 Web 2.0 应用程序:blog 和文件共享。Flickr 本质上是一种 blog 服务,为其 blog 文章(blog post)提供了一种更加特定于域的视图。用户收藏夹中的每张照片都由一个 blog 文章表示,这些照片(blog 文章)再被组织成各个相册(blog 类别)并用描述性标记加以扩充。此外,Flickr 还允许用户访问普通用户界面之外的真正的图像文件,这就意味着图像存储是由一种与 blog 服务分离的高端文件共享服务处理的。Project Zero 的可选项库套件中既包括了 blog 与文件共享组件,而且二者还可以组合在一起提供类似的照片共享体验。
我们这个照片共享 UI 的实现包括用文件共享组件存储照片,和用 blog 组件对照片进行组织。当用户浏览文件共享或 blog 内容时,将会看到他们的照片和照片共享 UI 更加以照片为中心,而且用户友好性更好。奇特的 Ajax 和受 Flash 驱动的小部件都使得 Flickr UI 非常有吸引力,但是如何创建它们不属于本教程讨论的范围。本文介绍了驱动这些小部件行为所需的 RESTful 接口和逻辑。一个设计良好的照片共享服务就绪后,就可以在它上面放置任何类型的 UI 装饰了。      
让我们先来仔细看一下 Zero 的 blog 和文件共享组件的设计,了解如何轻松地将它们应用到照片共享应用程序中。      
将 RESTful 资源用作构建块blog 和文件共享组件都由能使用 HTTP 方法处理的一个或多个资源类型组成。每个 HTTP 方法代表资源上的一个读或写操作,每个 HTTP URI 代表单个的资源实例。例如,针对 http://www.example.com/blogs/jsmith/posts/our-latest-vacation 的一个 HTTP GET 可能会返回用户 jsmith 的一个 blog 文章表示,标题为 Our Latest Vacation。同样地,针对 http://www.example.com/blogs/jsmith 的一个 HTTP POST 也可能被用来创建用户 jsmith 的 blog 中的一个新的 blog 文章。表 1 解释了 HTTP 方法和 URI 是如何用来与 Zero 的 blog 服务交互的,包括客户机和服务器之间交换的数据格式。用粗体表示的这些 URI 标记是变量:      
表 1. Zero blog 组件的 REST 接口URIHTTP 方法数据格式描述/blogsPOSTJSON使用在请求体中发送的 JSON 表示创建一个新的 blog/blogs/blog-nameGETJSON检索给定名称的 blog 的资源定义/blogs/blog-namePUTJSON更新给定名称的 blog 的资源定义/blogs/blog-nameDELETE无删除给定名称的 blog,包括它的所有文章和注释



/blogs/blog-name/postsPOSTAtom基于在请求体中发送的 JSON 表示创建一个新的 blog 文章/blogs/blog-name/posts/post-idGETAtom检索给定 ID 的 blog 文章的资源定义/blogs/blog-name/posts/post-idPUTAtom更新给定 ID 的 blog 文章的整个资源定义/blogs/blog-name/posts/post-idDELETE无删除给定 ID 的 blog 文章
当通过 HTTP 添加身份验证和授权时,就会注意到此 API 提供了管理一个或多个 blog 所需的全部功能。此 API 可非常容易地被 Ajax 工具箱(例如 Dojo)调用,这就让开发人员能够将响应数据和 UI 小部件进行集成,而不需要页面刷新(有关 Dojo 工具箱的更多信息,请参阅 )。当然,此 API 也能通过普通 HTTP 客户机访问,比如 Apache 的        HttpClient(面向 Java™ 技术的)或 cURL 命令行工具(面向 C 的)(有关链接,请参阅 )。您甚至可以使用 Web 浏览器的地址栏调用此 API 的某些部分。可使用 JavaScript Object Notation(JSON)对 blog 进行调用和修改,而 blog 文章则可使用 Atom(有关链接,请参见 )进行处理。表 2 给出了用于文件共享组件的一个类似的 API,它存储公共文件和目录:      
表 2. Zero 文件共享组件的 REST 接口URIHTTP 方法数据格式描述/file-shares/user-namePOSTJSON使用用户文件共享的 JSON 表示向其中添加新文件或目录/file-uploads/user-namePOSTHTML 表单数据使用 HTML 表单向用户的文件共享中添加新文件或目录/file-shares/user-name/pathGETJSON检索用户文件共享中给定路径上的文件或目录/file-shares/user-name/pathPUTJSON更新用户文件共享中给定路径上的文件或目录/file-shares/user-name/pathDELETE无删除用户文件共享中给定路径上的文件或目录
此文件共享 API 中值得注意的地方包括使用用户名来分离共享目录和使用双重方式来添加文件。每个用户都有自己的共享目录,这有利于使用用户照片共享帐号来确定存储图像文件的位置。在设计相册 UI 时利用 HTTP POST 添加文件的两个方法带来了很大的灵活性 — 既可以使用 HTML 表单来上传数据,也可以使用类似 Flickr Uploadr 工具的非浏览器客户机(有关链接,请参阅 )。      
这些 API 准备好后,就可以用这两个组件上的一系列操作来设计我们的照片共享服务了。您无需知道任何有关组件实现的详情 — 所有与它们的交互都通过其 RESTful HTTP 接口来实现。下一步就是做一些实质性的决定,以便确定照片共享动作如何映射到 HTTP 请求。
返回列表