第一节:概念

本节主要介绍REST及RESTful的相关概念。

什么是REST?

REST是REpresentational State Transfer的简称,翻译为:表述性状态转移。这个概念来自于Roy Thomas Fielding的博士论文。论文完成于2000年,题目是《Architectural Styles and the Design of Network-based Software Architectures》,是关于架构风格和网络软件架构的设计的研究。论文对比分析了各种网络软件架构之后,于第五章提出了REST这种架构风格。作者引入这种架构的主要针对分布式超媒体软件系统,从软件工程的角度给出了实现REST的原则,以及这些原则对于交互设计的约束。

正如论文的标题所述,REST是一种关于网络软件的架构风格。作者从“空架构”开始,逐步增加约束,最终形成了REST风格的架构。所谓“空架构”就是没有约束,作者在这个基础上,递进给出了六方面要求,包括:

  • 客户端-服务端(CS)
  • 无状态(Stateless)
  • 缓存(Cache)
  • 统一接口(Uniform Interface)
  • 层次化系统(Layered System)
  • 随需扩展(Code on Demand)

符合这六方面要求的架构风格,就是一种REST风格的架构。

这六种约束中,统一接口是REST风格中较为特别的要求。其余五条在其他类型的架构风格中或多或少的都有涉及。因此作者特别针对这一约束给出了更加详细的解释。REST架构主要关注数据连接器组件这三方面。数据是指资源和资源的状态表述连接器是指客户端服务器缓存域名解析数据通道等起连接作用的接口和类库;组件是指Web服务器反向代理服务器代理服务器浏览器等软件。就这三方面而言,资源以及其状态表述是REST特别提出的,也是REST这个名称的来源。

所谓资源,就是任何可以被命名的信息,资源是实体的概念映射。REST要求资源都拥有唯一的标识连接器要提供通用的接口来访问和操作这些资源。而所谓资源的状态表述是由数据以及元数据组成,组件使用资源的状态表述来执行操作。

以上就是原始作者的论文中对REST架构风格的主要描述。

什么是RESTful

一个系统的架构风格如果符合REST的原则和约束要求,即可以说这个系统的架构是RESTful的。而原作者的论文中提到的REST概念及其原则,相对工程实践来说,较为理论化和抽象化。因此,在具体实践上,大家提出了RESTful的要点包括:

  • 使用HTTP协议及其动词(GET,POST,PUT,DELETE...)交互
  • 使用URI作为资源的标识
  • 无状态
  • 幂等

这些要点和原则是实践中的一种总结,未形成统一的认识。

RESTful除了被用来形容系统的架构风格之外,也被用来形容符合以上要点的服务,例如RESTful的服务,RESTful的API等等。

为什么会出现REST?

作者的原论文中解释了为什么要设计REST,其主要目的是使网络系统在性能、扩展性、简单性、可修改性、可见性、可移植性和可靠性方面有所提高。

results matching ""

    No results matching ""