面向资源与面向活动的Web服务
从基本原理层次上说,REST 样式和 SOAP 样式 Web 服务的区别取决于应用程序是面向 资源的还是面向 活动的。
与此相对的是 面向活动的资源。该类型的应用程序集中于您可能执行的操作,而不是集中于操作所依靠的资源。活动服务的一个简单的例子就是银行事务,在那里用户可以把钱从一个账户转移到另一个账户上。用户不想直接操作资源(钱、银行账户等等),他们只想告诉银行他们想要达到的目的,并且让银行根据他们的利益对资源进行处理。用 GoF 术语来描述应用程序:
命令
中介方
策略
代理设计模式
面向资源服务不管资源的类型怎样,执行的操作可以保持相对不变,与面向资源服务不同,面向活动服务的操作完全依赖于正在执行的活动类型。例如,银行服务可以公开一个名为 transferFunds 的操作,该操作不同的输入将完全决定服务的资金转移功能。
在面向资源的服务中,一组普通操作担当支持性的工作角色,为客户端提供访问和操作资源。然而,资源是关注的中心,如下面 图 1 所示。

图 1. 面向资源服务与面向活动服务的比较
在面向活动服务中,对客户端请求执行的每个活动的单一操作来说,操作是关注的中心。
SOAP 样式 Web 服务通常是面向活动的。 WSDL 文档定义并描述特定于服务的操作。操作由特定于服务的消息交换组成。每一个操作都是一个可以执行的活动。那些正在被执行的操作所针对的内容通常是不相关的。正如 Web 服务资源框架系列规范所描述的,资源可以隐含在活动之中,但是这种隐含与活动的定义不相关,并且只是为了改进执行活动所依赖的上下文。与针对资源而执行活动的面向资源服务相比,它和用来访问资源的服务接口互不相关。
结合上下文:Bloglines 资源
Bloglines 是一个基于 Web 的应用服务,它允许个人对 weblog 和新闻的各种订阅保持跟踪,这些订阅内容以 Really Simple Syndication(RSS)和 Atom 提供的形式交付。
Bloglines 服务根本上是面向资源的。用户创建、更新、和删除订阅,并且定期访问服务来了解自上次访问站点后发生了哪些更新。Bloglines API 利用 REST 样式 Web 服务接口适当地反映了面向资源的特性。
特别地,对于 Bloglines 来说重要的是订阅的用户集合,如众所周知的 blogroll。单个 blogroll 会由许多不同的订阅组成。一个 订阅指向一个 RSS 或者一个 Atom 提供。
Blogrolls 和订阅都是资源。Bloglines API 使用基本 HTTP 操作来检索关于用户的 blogroll 和订阅资源的当前状态信息。
例如,要访问用户 blogroll 的当前快照,用户向 URI //rpc.bloglines.com/listsubs 发送一个 HTTP GET 请求。在严格的 REST 条件下,该 API 确定了每一个 Bloglines 用户的订阅。当调用这个操作时,HTTP 身份验证请求收集关于检索哪个用户订阅的附加上下文。由 XML 文档组成的操作返回的信息为已验证用户列出所有的个人订阅。
- 本文关键词:

