这编论文可谓时Rest的开山之做,所以不得不拜读,所以也做个转贴
============================
摘要:
Roy Thomas Fielding博士关于REST的论文绝负盛名,被称为Web架构设计领域的”圣经”。日前,由ajaxcn.org社区、91yee 翻译社区、Matrix社区联合参与完成了对该论文的中文化工作,并且在完成翻译校对工作后获得了Fielding博士的官方许可,正式发布在满江红开源 网站的OpenDoc系列文档中,大家可以从其网站下载。
<!---->
Roy Thomas Fielding 博士的论文:《Architectural Styles andthe Design of Network-based Software Architectures》 绝负盛名,被称为Web架构设计领域的”圣经”。 日前,由ajaxcn.org社区、91yee 翻译社区、Matrix社区联合参与完成了对该论文的中文化工作,并且在完成翻译校对工作后获得了Fielding博士的官方许可,正式发布在满江红开源网站的OpenDoc系列文档中,大家可以从这里下载:http://www.redsaga.com/opendoc/REST_cn.pdf
在此感谢为这篇论文中文版作出过贡献的所有人员,伟大思想的共享范围是无限的!
作者简介
Roy Thomas Fielding 博 士是HTTP、URI等Web架构标准的主要设计者。他在2000年所著的博士论文中,首次系统全面地阐述了REST的架构风格和设计思想。这篇论文是 Web发展史上一篇非常重要的技术文献,所有做Web开发的开发者都应该熟读这篇论文,深刻理解Web架构和HTTP、URI等标准背后的基本原理。
译者简介
李锟(ajaxcn.org 网站 站长)、廖志刚(91yee 翻译社区 负责人)、cleverpig( Matrix 技术社区 负责人)、杨光(《重构与模式》的译者)
版权声明
本论文是有版权的著作,英文原文的版权属于Roy Thomas Fielding博士所有,中文译文的版权属于全体译者共同所有。译者在得到了Fielding博士的许可之后翻译了这篇论文。本译文的发布权属于 Fielding博士和全体译者共同所有。未经许可,其他网站不得全部或部分转载本译文的内容。
致谢
本论文是Web发展史上一篇非常重要的技术文献。出于社会责任感,译者认为极其有必要将它介绍给国人,使国人得以一窥HTTP和URI等Web架构 标准背后的基本原理。基于相同的基本原理,Web开发者能够设计并建造出最为高效的Web应用。因此译者发起了这一公益性的翻译项目,该项目得到了国内一 些专家的支持,他们认真地审阅了译文,提出了很多中肯的评论,使得译文的质量得以保证。在此特向他们表示诚挚的感谢,他们是:庄表伟、李琳骁、金尹、孟 岩、骆古道、范凯、刘新生、刘江。
论文摘要
架构风格与基于网络的软件架构设计
作者:Roy Thomas Fielding
信息与计算机科学博士
加州大学欧文分校,2000年
博士论文答辩委员会主席:Richard N. Taylor教授
万维网(World Wide Web)的成功,很大程度上是因为其软件架构的设计满足了Internet规模(Internet-scale)的分布式超媒体系统的需求。在过去的10 年间,通过对定义Web架构的标准所做的一系列修改,Web以迭代的方式不断地发展着。为了识别出Web需要改善的那些方面,并且避免对其进行不想要的修 改,必需要有一种现代Web架构的模型,用来指导Web的设计、定义和部署。
软件架构的研究探索了如何以最佳的方式划分一个系统、如何标识组件、组件之间如何通信、信息如何沟通、系统的元素如何能够独立地进化,以及上述的所 有东西如何能够使用形式化的和非形式化的符号加以描述。我的工作的动机是希望理解和评估基于网络的应用的架构设计,通过有原则地使用架构约束,从而从架构 中获得所希望的功能、性能和社会学几方面的属性。一种架构风格是一组已命名的、协作的架构约束。
这篇论文定义了一个框架,致力于通过架构风格来理解软件架构,并且展示如何使用风格来指导基于网络的应用的架构设计。本文使用了一个对基于网络的应 用的架构风格的调查,根据不同的风格在分布式超媒体的架构中所导致的架构属性,来对这些风格进行分类。然后我介绍了表述性状态转移 (Representational State Transfer,REST)的架构风格,并且描述了如何使用REST来指导现代Web架构的设计和开发。
REST强调组件交互的可伸缩性、接口的通用性、组件的独立部署、以及用来减少交互延迟、增强安全性、封装遗留系统的中间组件 (intermediary components)。我描述了指导REST的软件工程原则和选择用来支持这些原则的交互约束,并将它们与其他架构风格的约束进行了对比。最后,我描述 了从在超文本转移协议(HTTP)和统一资源标识符(URI)的标准中应用REST,以及从这两个标准在Web客户端和服务器软件的后续部署等过程中学到 的经验教训。
绪论
抱歉……你说的可是”屠刀”? –摘自《建筑师讽刺剧》(The Architects Sketch)[111]
正如Perry和Wolf的预言,软件架构成为了20世纪90年代软件工程研究的焦点。由于现代软件系统的复杂性,更加有必要强调组件化的系统,其 实现被划分为独立的组件,这些组件通过相互通信来执行想要完成的任务。软件架构的研究探索了如何以最佳方式划分一个系统、如何标识组件、组件之间如何通 信、信息如何沟通、组成系统的元素如何能够独立地进化,以及上述的所有东西如何能够使用形式化的和非形式化的符号加以描述。
一个优秀的架构并非凭空想象。所有架构级的设计决策应该根据被设计系统的功能、行为和社会学等方面的需求来作出,这是一个原则,既适用于软件架构, 同样也适用于传统的建筑架构领域。”形式追随功能”的指导方针来自从数百年失败的建筑项目中获得的经验,但是却常常被软件从业者忽视。上面引用的那句滑稽 搞笑的话来自于Monty Python系列讽刺剧,这是当一个建筑师在面对设计一个城市公寓区的目标时,头脑里所抱有的荒诞想法。他想使用所有的现代屠宰场的组成部分来完成这个设 计。这也许是他所构思过的最棒的屠宰场,但是对于预期的房客来说却谈不上舒适,他们不得不战战兢兢地行穿行在安装着旋转刀头的走廊中。
《建筑师讽刺剧》里的夸张说法也许看似荒唐可笑,但是考虑到我们是如此频繁地看到软件项目一开始就采用最新时髦的架构设计,到后来却发现系统的需求 实际上并不需要这样一种架构。design-by-buzzword(按照时髦的词汇来做设计)是一种常见的现象。至少在软件行业中,很多此类行为是由于 对一组特定的架构约束为什么是有用的缺乏理解。换句话说,当选择那些优秀的软件架构来重用时,这些架构背后的推理过程(reasoning),对于设计者 来说并非是显而易见的。
这篇论文探索了在计算机科学的两个研究学科(软件和网络)边界上的连接点。软件研究长期以来关注软件设计的分类和对于设计方法学的开发,但是极少能 够客观地评估不同的设计选择对于系统行为的影响。网络研究则恰恰相反,集中于系统之间普通的通信行为的细节和提高特殊通信技术的性能,却常常忽略了一个事 实,即改变一个应用的交互风格对于性能产生的影响要比改变交互所使用的通信协议更大。我的工作的动机是希望理解和评估基于网络的应用的架构设计,通过有原 则地使用架构约束,从而从架构中获得所希望的功能、性
能和社会学几方面的属性。当给定一个名称时,一组协作的架构约束就成为了一种架构风格。这篇论文的前三章定义了一个通过架构风格来理解软件架构的框架,揭 示了架构风格如何能够被用来指导基于网络的应用的架构设计。当将常见的架构风格应用于基于网络的超媒体的架构时,将会导致一系列架构属性,根据这些架构属 性来对架构风格进行调查和分类。然后使用得到的分类来识别出一组能够改善早期万维网的架构的架构约束。
如同我们在第4章中所讨论的,设计Web的架构就必须要理解Web的需求。Web是旨在成为一个Internet规模的分布式超媒体系统,这意味着 它的内涵远远不只仅仅是地理上的分布。Internet是跨越组织边界互相连接的信息网络。信息服务的提供商必须有能力应对无法控制(anarchic) 的可伸缩性的需求和软件组件的独立部署。通过将动作控制(actioncontrols)内嵌在从远程站点获取到的信息的表述之中,分布式超媒体为访问服 务提供了一种统一的方法。因此Web的架构必须在如下环境中进行设计,即跨越高延迟的网络和多个
可信任的边界,以大粒度的(large-grain)数据对象进行通信。
第5章介绍并详细描述了为分布式超媒体系统设计的表述性状态转移(REST)的架构风格。REST提供了一组架构约束,当作为一个整体来应用时,强 调组件交互的可伸缩性、接口的通用性、组件的独立部署、以及用来减少交互延迟、增强安全性、封装遗留系统的中间组件。我描述了指导REST的软件工程原则 和选择用来支持这些原则的交互约束,并将它们与其他架构风格的约束进行了对比。
如第6章中所展示的那样,在过去的6年间,REST架构风格被用来指导现代Web的架构的设计和开发。这个工作与我所创作的超文本转移协议 (HTTP)和统一资源标识符(URI)的Internet标准共同完成,这两个规范定义了被所有Web之上的组件交互所使用的通用的接口。
就像大多数真实世界中的系统一样,并非所有已部署的Web架构的组件都服从其架构设计中给出的每一个约束。REST既被用来作为定义架构改进的一种 方法,也被用来作为识别架构不匹配(mismatch)的一种方法。当由于无知或者疏忽,一个软件实现以违反架构约束的方式来部署时,就会发生不匹配。尽 管不匹配通常无法避免,但是有可能在它们定型之前识别出它们。在第6章中总结了几种在现代Web架构中的不匹配情况,并且对它们为何会出现和它们如何偏离 REST进行了分析。
概括来说,这篇论文对于Internet和计算机科学领域的软件研究作出了如下贡献:
● 一个通过架构风格来理解软件架构的框架,包括了一组相容的术语,用来描述软
件架构;
● 通过当某种架构风格被应用于一个分布式超媒体系统的架构时,它将导致的架构
属性,来对基于网络的应用的架构风格进行分类。
● REST,一种新颖的分布式超媒体系统的架构风格;以及
● 在设计和部署现代万维网的架构的过程中,应用和评估REST架构风格。
现代Web是REST风格架构的一个实例。尽管基于Web的应用能够包括对于其他风格的交互的支持,但它的协议和性能所关注的焦点是分布式超媒体。 REST仅仅详细描述了架构中那些被认为对于Internet规模的分布式超媒体交互来说最为本质的部分。在现有协议无法表达组件交互的所有可能语义的地 方,以及在语法细节能够被替换为更加有效的形式而不需要改变架构的能力的地方,都存在着Web架构需要加以改进的领域。同样地,协议扩展能够被拿来与 REST进行比较,检查它们是否符合这个架构;如果不符合,更加有效的做法是将那个功能重定向到一个使用更加适用的架构风格并行运行的系统。
在一个理想的世界里,软件系统的实现将精确地匹配它的设计。现代Web架构的一些功能确实完全符合它们在REST中的设计标准,例如将URI[21]作为 资源标识符来使用,以及使用Internet媒体类型[48]来标识表述的数据格式。然而,由于未做遗留系统试验(但是必需要保持向后兼容性)和不了解架 构风格的开发者所部署的扩展,在现代Web协议中也存在着一些不考虑架构设计的方面。REST提供了一个模型,不仅可以用来开发和评估新的功能,也可以用 来识别和理解破损的功能。
可以论证万维网是世界上最大型的分布式应用。理解在Web底层的关键架构原则能够帮助解释它在技术上的成功,并且为其他的分布式应用带来改进,特别是那些 服从于相同的或相似的交互方法的应用。REST既贡献了在现代Web软件架构背后的基本原理,也为我们上了重要的一课,展示了软件工程原则如何能够被系统 地应用在对于一个真实软件系统的设计和评估的过程中。
对于基于网络的应用来说,系统的性能受到了网络通信的支配。对于一个分布式超媒体系统来说,组件交互由大粒度的数据转移组成,而不是由计算密集型的任务组 成。REST风格被开发出来以满足这些需求,它聚焦于资源和表述的通用的连接器接口,支持中间组件进行处理和缓存以及组件的替换,这使得基于Web的应用 的规模从在1994年的每天10万个请求发展到了在1999年的每天6亿个请求。
通过对HTTP/1.0[19]和HTTP/1.1[42]标准6年的开发、精心设计的URI[21]和相关的URL[40]标准、以及在现代Web架构 中成功地部署很多独立开发的、商业级的应用系统,REST架构风格得到了验证。它既可以作为一个指导设计的模型,也可以作为一个对于Web协议的架构扩展 的严格的测试。将来的工作聚焦于对HTTP/1.x协议家族的替代者的开发,以及使用一个更加有效的符
号化(tokenized)的语法来扩展这个架构指导,但不会丢失由REST识别出的想要得到的属性。无线设备的需求(它有着很多与REST背后的原则相 同的特性)将会激发应用级协议设计和包括了主动的中间组件的架构这两方面的进一步发展。在扩展REST以便考虑可变的请求优先级、有区别的服务质量 (quality-of-service)、以及由持续的数据流组成的表述(例如那些由广播的音频和视频来源生成的数据)等方面,也存在着一些兴趣。