heartstill

博客园 首页 新随笔 联系 订阅 管理

面向资源的架构

The Resource-Oriented Architecture

我已经向你展示了REST的能力,但是还没有系统地讲述该能力是怎样形成的,以及如何来展现该能力。在这一章,我将概述一个具体的REST式架构——面向资源的架构(Resource-Oriented Architecture,ROA)。ROA是一种把实际问题转换成REST式Web服务的方法:它令URI、HTTP和XML具有跟其他Web应用一样的工作方式,令程序员们容易使用它们。

在第1章,我根据REST式Web服务(RESTful web services)在两个问题上的不同做法来对它们进行分类。这两个问题分别对应于REST的四个标志特征中的两个。

作用域信息(scoping information)(“服务器发送的为什么是这些数据,而不是其他数据”)——该信息是放在URI里的。这是可寻址性(addressability)原则。

方法信息(method information)(“为什么服务器应当发送而不是删除这些数据?”)——该信息是放在HTTP方法里的。HTTP方法只有少数几种,而且人人都事先知道这些方法的作用。这是统一接口(uniform interface)原则。

在这一章,我将介绍面向资源的架构(ROA)的功能成分:资源、资源名称、资源的表示、资源间的链接。我将解释并宣传ROA的特性:可寻址性(addressability)、无状态性(statelessness)、连通性(connectedness)和统一接口(uniform interface)。我将展示Web技术(HTTP、URI和XML)是如何实现这些功能成分以获得上述特性的。

在前面几章,我通过现有的一些Web服务(如S3)举例说明了一些概念。在本章,我除了会引用一些现有的Web服务(web services)以外,还会引用一些现有的网站(web sites)来讲解概念。希望此刻我已经让你相信“网站就是Web服务,而且许多Web应用(比如搜索引擎)就是REST式Web服务”了。我在讲述一些抽象概念(如可寻址性)时,会给出一些真实的URIs,这样你就可以通过在浏览器里输入这些URIs来亲身体会有关概念了。

面向资源的架构?

Resource-Oriented What Now?

为什么要发明一个新词“面向资源的架构(Resource-Oriented Architecture,ROA)”呢?

为什么不直接用REST?嗯。我确实在本书的封面上提到了REST,并且我认为符合面向资源的架构也符合REST风格。

但是,REST并不是一种架构,而是一组设计原则。你可以讲“在遵守这些原则方面,一个架构做得比另一个架构好”,但是你不能讲“REST架构”,因为不存在一个叫“REST架构”的东西。

直到目前为止,人们已经习惯于在设计服务时,根据他们自己对REST的理解发明一次性架构(one-off architectures)。这样做最显著的结果,是产生了各式各样的REST-RPC混合Web服务,而其创建者们还声称它们为REST式的。为此,我提出了一组构建真正REST式Web服务的具体规则,以期能够结束这一状况。在接下来的两章里,我会给出一些简单的步骤,你只要根据这些步骤就能把需求转换成一个个资源(resources)。即便不喜欢我的规则,你至少可以知道作哪些改变是不会导致违反REST风格的。

作为一组设计原则,REST是非常通用的。具体地说,它并不限定于Web。REST不依赖于HTTP机制或URI结构。但因为我讨论的是Web服务,所以特地用Web相关技术来讲解面向资源的架构(ROA)。我想在特定的编程语言中探讨如何用HTTP和URI来实现REST。假如将来出现非基于Web的REST式架构,它的最佳实践(best practices)将跟ROA的差不多,只是具体细节会有点差别。到时我们会有办法解决的。

REST的传统定义留下了一些空白,这给实践者们创造了传播坊间传言(folklore)的环境。我特意在Roy Fielding的博士论文及W3C相关标准的基础上更进一步——希望对部分问题做一个了结,把那些坊间传言提炼为一组明确定义的最佳实践。即便REST是一种架构,用REST来称呼我的架构也是不公平的。我会把自己的实践经验和建议,与那些关于Web的总体想法结合起来。

我提出ROA这个新词的根本原因是:“REST”这个词被太多地用在派别之争里。假如某人提到这个词,那通常暗示着,他本人所赞同的架构才是真正的REST式架构,而赞同别的REST式架构的人则会对此持有异议。尽管REST社区在一些基本问题(比如URI和HTTP的价值)上已达成一致,但REST社区还是存在着不同派别。

最理想的状况是没有派别之争。可是,太多的经验告诉我,仅凭意愿并不能结束它。所以,要给我的关于“应当如何设计REST式应用”的思想取一个不同的名字。这样,万一这些想法被不可避免地用到派别之争中时,那些不同意的人就可以针对我的面向资源的架构(ROA),而不是跟REST式架构或一般的REST混为一谈。先要把概念理清了,才可能做到理解。

“面向资源的(resource-oriented)”和“面向资源的架构(resource-oriented architecture)”这样的措辞已经被用于描述一般的REST式架构了(注1)。我承认“面向资源的架构”并不完全是我原创的词,但我的用法跟先前的用法刚好吻合,而且我觉得采用这个词比声称代表整个REST要好。

posted on 2010-12-23 16:37  开始测试  阅读(2006)  评论(0编辑  收藏  举报