经典论文 — REST
旧文 2010-02-17
牛人Roy Thomas Fielding的博士论文,此处可以访问到英文版,中文版可以google一下. Roy何许人也?HTTP1.0,1.1版本以及URI规范的主要作者,Apache的co-founder。在写这篇论文之前已经很牛了,笔者不明白的是这种档次牛人还要读博士,文凭有这么重要吗? 文中没有任何令人眼花的数学公式和统计图表,实际上是一篇描述URI,HTTP设计经验教训总结的文章。 文章的全称是“Architectural Styles and the Design of Network-based Software Architectures”,但是由于文中Roy提出的软件架构Representational State Transfer (REST)被广为传颂,因此人们更多的是提到REST。
笔者仔细读过之后,发现Roy的博士论文有些取巧。原文是2000年写成的,当时HTTP已设计Over了,因此文章应该是总结性的,而非前瞻性的,文章总结了REST架构风格在HTTP和URI规范设计中的应用。对于Roy这样的一线开发者以及标准制定者来说,总结自己做过的事情应该是轻车熟路,估计几个月就搞定了一个博士学位。
我们现在看到的很多经典协议的RFC其实教育意义并不像实际地位那么重要,例如TCP协议的RFC,笔者看的晕头晕脑。因为多数RFC仅仅罗列协议该如何实现,对于背后的设计方法往往不会提及,读者看到的往往是一个不知道从哪里变出来的状态机,有的状态机复杂到无法用图形表示而只好列一个表格,读者无法获得深入的背景。其实这和弯曲的文章一样,讨论往往更精彩。这也是Roy这篇文档的价值所在,这篇文档是学习HTTP, URI等协议标准的很好的一个注脚。
REST这篇文章与其说是Network领域还不如说是软件工程领域。Roy首先介绍了软件架构风格的概念,笔者的理解是,软件架构风格就是软件运行某个阶段的架构快照,属于UML中所谓动态模型的一部分。当然笔者的软工属于业余水平,专业人士不要笑话。Roy首先使用大量的篇幅介绍了现有的几种典型的软件架构风格,接着从零开始,一步一步的告诉读者设计者是如何参照现有的架构风格建立一个REST风格的Web架构。
首先从一无所有的空风格开始:
这个东东就是作者独创的REST. 对于低手来说,系统分析怎么做无从下手,对于中手,套用积累的经验具体问题具体分析。对于Roy这种真正意义上的Architect,把系统架构这一看来非形式化的东东,以近似形式化的方式表达了出来,思路和目的很清晰,尤其重要的一图是5.1.8风格约束小结部分的总结,下图将REST是如何继承发展现有的架构风格清晰的描述了出来。