
REST 依赖一个单一的应用程序协议(HTTP)、几个 URI、以及几种通过 XML 标准化的数据格式。它采用成熟的 HTTP 方法(比如 GET 和 POST)来指挥应用程序。REST 开发人员使用 URI 来创建一个公共基础,以便应用程序使用 HTTP 和 XML 来共享数据,而不是为应用程序创建一种机器可读的标准方法来发现和使用远程系统上的应用程序组件(这是 SOAP 用于 web 服务的方法)。REST 开发人员使用 XML 文档而不是应用程序方法调用来告诉分布式程序如何相互使用数据。
REST 支持者指出,使用 SOAP 协议直接访问远程程序的功能必定会遇到 DCOM 和 Common Object Request Broker Architecture 等之前分布式计算架构所遇到的互操作性问题。
Active Resource
在对 web 应用程序在服务器和客户机应用程序之间的通信采用 RESTful 方法之前,SOAP 和其他 XML-RPC 形式被用于通过一个 API 进行通信。Rails 2 引入的 Active Resource 替代了 Action Web Service。Active Resource 完全理解 RESTful 路由和 XML 表示。它是一个类,用于将 RESTful 资源映射为 Rails 应用程序中的模型。Active Resource 提供一些工具来快速、轻松地使用遵守 Rails RESTful URI 结构和协议约定的基于 REST 的 web 服务。Active Resource 将来自任何合格服务的响应映射到富 Ruby 对象。Active Resource 还提供轻松执行基本的 CRUD 功能需要的全部生命周期方法。
CRUD 操作分别对应 HTTP 方法 POST、GET、PUT 和 DELETE。而且,Active Resource 对这些 HTTP 方法中的每个方法都有一个方法。它们接收与 CRUD 相同的参数,但返回收到的 XML 的一个哈希表。Active Resource 对象本质上是 REST web 服务器的前端。它通过向服务器回调 HTTP 调用并将 XML 结果解析回一个 Ruby 对象中来获取并修改它的数据。
清单 1 展示了一个最小 Active Resource 示例。假设有一个图书馆应用程序,每个类别作为一个不同的客户端,且 Indian History 是其中一个类别。
清单 1. Active Resource 示例
class IndianHistory < ActiveResource::Base self.site = “http://indian-history.com” end
ActiveResource 拥有与 Active Record 相同的方法。在上面的代码样例中,类 IndianHistory 正继承自 ActiveResource Base。在第二行中,self.site 持有包含 IndianHistory 图书的 URI 的站点值。在本例中,这个 URI 是 http://indian-history.com(假设这个 URI 是带有必要模型和控制器动作的另一个 Rails 应用程序)。
现在,这个类被映射到站点值定位的 RESTful 资源,您现在可以操作 IndianHistory 类的资源。要获取 Indian History 下的所有图书列表,您将调用它的 find 方法,它类似于 Active Record find 方法。










