logo资料库

REST论文中文翻译版.pdf

第1页 / 共84页
第2页 / 共84页
第3页 / 共84页
第4页 / 共84页
第5页 / 共84页
第6页 / 共84页
第7页 / 共84页
第8页 / 共84页
资料共84页,剩余部分请下载后查看
论文摘要
绪论
第1章 软件架构
1.1 运行时抽象
1.2 元素
1.2.1 组件
1.2.2 连接器
1.2.3 数据
1.3 配置
1.4 属性
1.5 风格
1.6 模式和模式语言
1.7 视图
1.8 相关工作
1.8.1 设计方法学
1.8.2 设计、设计模式、模式语言手册
1.8.3 参考模型和特定于领域的软件架构
1.8.4 架构描述语言
1.8.5 形式化的架构模型
1.9 小结
第2章 基于网络的应用的架构
2.1 范围
2.1.1 基于网络 vs. 分布式
2.1.2 应用软件 vs. 网络软件
2.2 评估应用软件架构的设计
2.3 关键关注点的架构属性
2.3.1 性能(Performance)
2.3.1.1 网络性能(Network Performance)
2.3.1.2 用户可觉察的性能(User-perceived Performance)
2.3.1.3 网络效率(Network Efficiency)
2.3.2 可伸缩性(Scalability)
2.3.3 简单性(Simplicity)
2.3.4 可修改性(Modifiability)
2.3.4.1 可进化性(Evolvability)
2.3.4.2 可扩展性(Extensibility)
2.3.4.3 可定制性(Customizability)
2.3.4.4 可配置性(Configurability)
2.3.4.5 可重用性(Reusability)
2.3.5 可见性(Visibility)
2.3.6 可移植性(Portability)
2.3.7 可靠性(Reliability)
2.4 小结
第3章 基于网络的架构风格
3.1 分类方法学
3.1.1 选择哪些架构风格来进行分类
3.1.2 风格所导致的架构属性
3.1.3 可视化
3.2 数据流风格(Data-flow Styles)
3.2.1 管道和过滤器(Pipe and Filter,PF)
3.2.2 统一管道和过滤器(Uniform Pipe and Filter,UPF)
3.3 复制风格(Replication Styles)
3.3.1 复制仓库(Replicated Repository,RR)
3.3.2 缓存(Cache,$)
3.4 分层风格(Hierarchical Styles)
3.4.1 客户-服务器(Client-Server,CS)
3.4.2 分层系统(Layered System,LS)和分层-客户-服务器(Layered-Client-Server,LCS)
3.4.3 客户-无状态-服务器(Client-Stateless-Server,CSS)
3.4.4 客户-缓存-无状态-服务器(Client-Cache-Stateless-Server,C$SS)
3.4.5 分层-客户-缓存-无状态-服务器(Layered-Client-Cache-Stateless-Server,LC$SS)
3.4.6 远程会话(Remote Session,RS)
3.4.7 远程数据访问(Remote Data Access,RDA)
3.5 移动代码风格(Mobile Code Styles)
3.5.1 虚拟机(Virtual Machine,VM)
3.5.2 远程求值(Remote Evaluation,REV)
3.5.3 按需代码(Code on Demand,COD)
3.5.4 分层-按需代码-客户-缓存-无状态-服务器(Layered-Code-on-Demand-Client-Cache-Stateless-Server,LCODC$SS)
3.5.5 移动代理(Mobile Agent,MA)
3.6 点对点风格(Peer-to-Peer Styles)
3.6.1 基于事件的集成(Event-based Integration,EBI)
3.6.2 C2
3.6.3 分布式对象(Distributed Objects,DO)
3.6.4 被代理的分布式对象(Brokered Distributed Objects,BDO)
3.7 局限
3.8 相关工作
3.8.1 架构风格和模式的分类方法
3.8.2 分布式系统和编程范例
3.8.3 中间件
3.9 小结
第4章 设计Web架构:问题与洞察力
4.1 万维网应用领域的需求
4.1.1 低门槛
4.1.2 可扩展性
4.1.3 分布式超媒体
4.1.4 Internet规模
4.1.4.1 无法控制的可伸缩性
4.1.4.2 独立部署
4.2 问题
4.3 推导方法(Approach)
4.4 小结
第5章 表述性状态转移(REST)
5.1 推导REST
5.1.1 从“空”风格开始
5.1.2 客户-服务器
5.1.3 无状态
5.1.4 缓存
5.1.5 统一接口
5.1.6 分层系统
5.1.7 按需代码
5.1.8 风格推导小结
5.2 REST架构的元素
5.2.1 数据元素(Data Elements)
5.2.1.1 资源和资源标识符(Resources and Resource Identifiers)
5.2.1.2 表述(Representations)
5.2.2 连接器(Connectors)
5.2.3 组件(Components)
5.3 REST架构的视图
5.3.1 过程视图(Process View)
5.3.2 连接器视图(Connector View)
5.3.3 数据视图(Data View)
5.4 相关工作
5.5 小结
第6章 经验与评估
6.1 Web标准化
6.2 将REST应用于URI
6.2.1 重新定义资源
6.2.2 操作影子(Manipulating Shadows)
6.2.3 远程创作(Remote Authoring)
6.2.4 将语义绑定到URI
6.2.5 REST在URI中的不匹配
6.3 将REST应用于HTTP
6.3.1 可扩展性
6.3.1.1 协议版本控制
6.3.1.2 可扩展的协议元素
6.3.1.3 升级
6.3.2 自描述的消息
6.3.2.1 主机
6.3.2.2 分层的编码
6.3.2.3 语义独立性
6.3.2.4 传输独立性
6.3.2.5 尺寸限制
6.3.2.6 缓存控制
6.3.2.7 内容协商
6.3.3 性能
6.3.3.1 持久连接
6.3.3.2 直写式(write-through)缓存
6.3.4 REST在HTTP中的不匹配
6.3.4.1 区分非权威的响应
6.3.4.2 Cookie
6.3.4.3 必需扩展(Mandatory Extensions)
6.3.4.4 混合元数据(Mixing Metadata)
6.3.4.5 MIME语法
6.3.5 将响应匹配到请求
6.4 技术迁移
6.4.1 libwww-perl的部署经验
6.4.2 Apache的部署经验
6.4.3 开发顺从于URI和HTTP/1.1的软件
6.5 架构上的教训
6.5.1 基于网络的API的优势
6.5.2 HTTP并不是RPC
6.5.3 HTTP并不是一种传输协议
6.5.4 媒体类型的设计
6.5.4.1 一个基于网络的系统中的应用状态
6.5.4.2 增量处理
6.5.4.3 Java vs. JavaScript
6.6 小结
结论
参考文献
1 OpenDoc Series' 架构风格与基于网络的软件架构设计 (博士论文) 作者:Roy Thomas Fielding 博士 译者:李锟、廖志刚、刘丹、杨光
2 原文链接:Architectural Styles and the Design of Network-based Software Architectures 作者简介: Roy Thomas Fielding 博士是 HTTP 和 URI 等 Web 架构标准的主要设计者,Apache HTTP 服务器的主要开发者。他为 Web 架构的设计作出极其杰出的贡献,他的工作为 Web 架构奠 定了坚实的基础。 译者简介: 负责人)、刘丹(Matrix 技术社 李锟(ajaxcn.org 区负责人)、杨光(《重构与模式》的译者) 网站 站长)、廖志刚(91yee 翻译社区 版权声明: 本论文是有版权的著作,英文原文的版权属于 Roy Thomas Fielding 博士所有,中文译 文的版权属于全体译者共同所有。译者在得到了 Fielding 博士的许可之后翻译了这篇论文。 本译文的发布权属于 Fielding 博士和全体译者共同所有。未经许可,其他网站不得全部或部 分转载本译文的内容。 致谢: 本论文是 Web 发展史上一篇非常重要的技术文献。出于社会责任感,译者认为极其有 必要将它介绍给国人,使国人得以一窥 HTTP 和 URI 等 Web 架构标准背后的基本原理。基 于相同的基本原理,Web 开发者能够设计并建造出最为高效的 Web 应用。因此译者发起了 这一公益性的翻译项目。除了四位主要的译者以外,来自新浪公司的田乐、丁舜佳和梁晓星 也参与了第 3 章的部分翻译工作,对他们的辛勤工作表示感谢。此外,国内一些专家认真地 审阅了论文的译文,提出了很多中肯的评论,使得译文的质量得以保证。在此向他们表示诚 挚的感谢,他们是:庄表伟、李琳骁、金尹、孟岩、骆古道、范凯、刘新生、刘江。
3 内容目录 论文摘要..............................................................................................................................................7 绪论......................................................................................................................................................8 第 1 章 软件架构...............................................................................................................................10 1.1 运行时抽象.............................................................................................................................10 1.2 元素 .......................................................................................................................................10 1.2.1 组件..................................................................................................................................11 1.2.2 连接器..............................................................................................................................12 1.2.3 数据 ................................................................................................................................12 1.3 配置.........................................................................................................................................12 1.4 属性 .......................................................................................................................................13 1.5 风格.........................................................................................................................................13 1.6 模式和模式语言.....................................................................................................................14 1.7 视图.........................................................................................................................................15 1.8 相关工作 ...............................................................................................................................15 1.8.1 设计方法学......................................................................................................................15 1.8.2 设计、设计模式、模式语言手册..................................................................................15 1.8.3 参考模型和特定于领域的软件架构..............................................................................16 1.8.4 架构描述语言..................................................................................................................16 1.8.5 形式化的架构模型..........................................................................................................17 1.9 小结 .......................................................................................................................................17 第 2 章 基于网络的应用的架构.......................................................................................................18 2.1 范围.........................................................................................................................................18 2.1.1 基于网络 vs. 分布式......................................................................................................18 2.1.2 应用软件 vs. 网络软件..................................................................................................18 2.2 评估应用软件架构的设计.....................................................................................................18 2.3 关键关注点的架构属性.........................................................................................................19 2.3.1 性能(Performance).....................................................................................................19 2.3.1.1 网络性能(Network Performance).......................................................................20 2.3.1.2 用户可觉察的性能(User-perceived Performance)............................................20 2.3.1.3 网络效率(Network Efficiency)..........................................................................21 2.3.2 可伸缩性(Scalability).................................................................................................21 2.3.3 简单性(Simplicity).....................................................................................................21 2.3.4 可修改性(Modifiability)............................................................................................21 2.3.4.1 可进化性(Evolvability)......................................................................................22 2.3.4.2 可扩展性(Extensibility)......................................................................................22 2.3.4.3 可定制性(Customizability)................................................................................22 2.3.4.4 可配置性(Configurability).................................................................................22 2.3.4.5 可重用性(Reusability)........................................................................................22 2.3.5 可见性(Visibility).......................................................................................................22 2.3.6 可移植性(Portability).................................................................................................23 2.3.7 可靠性(Reliability).....................................................................................................23 2.4 小结.........................................................................................................................................23
4 第 3 章 基于网络的架构风格...........................................................................................................24 3.1 分类方法学.............................................................................................................................24 3.1.1 选择哪些架构风格来进行分类......................................................................................24 3.1.2 风格所导致的架构属性..................................................................................................24 3.1.3 可视化..............................................................................................................................24 3.2 数据流风格(Data-flow Styles)..........................................................................................25 3.2.1 管道和过滤器(Pipe and Filter,PF)..........................................................................25 3.2.2 统一管道和过滤器(Uniform Pipe and Filter,UPF)................................................26 3.3 复制风格(Replication Styles)............................................................................................26 3.3.1 复制仓库(Replicated Repository,RR).....................................................................26 3.3.2 缓存(Cache,$)..........................................................................................................26 3.4 分层风格(Hierarchical Styles)...........................................................................................27 3.4.1 客户-服务器(Client-Server,CS)..............................................................................27 3.4.2 分层系统(Layered System,LS)和分层-客户-服务器(Layered-Client- Server,LCS).........................................................................................................................28 3.4.3 客户-无状态-服务器(Client-Stateless-Server,CSS)...............................................28 3.4.4 客户-缓存-无状态-服务器(Client-Cache-Stateless-Server,C$SS)........................28 3.4.5 分层-客户-缓存-无状态-服务器(Layered-Client-Cache-Stateless-Server,LC$SS) ...................................................................................................................................................29 3.4.6 远程会话(Remote Session,RS)...............................................................................29 3.4.7 远程数据访问(Remote Data Access,RDA)............................................................29 3.5 移动代码风格(Mobile Code Styles)..................................................................................29 3.5.1 虚拟机(Virtual Machine,VM).................................................................................30 3.5.2 远程求值(Remote Evaluation,REV).......................................................................30 3.5.3 按需代码(Code on Demand,COD) .......................................................................31 3.5.4 分层-按需代码-客户-缓存-无状态-服务器(Layered-Code-on-Demand-Client-Cache- Stateless-Server,LCODC$SS).............................................................................................31 3.5.5 移动代理(Mobile Agent,MA).................................................................................31 3.6 点对点风格(Peer-to-Peer Styles).......................................................................................31 3.6.1 基于事件的集成(Event-based Integration,EBI).....................................................32 3.6.2 C2.....................................................................................................................................32 3.6.3 分布式对象(Distributed Objects,DO).....................................................................33 3.6.4 被代理的分布式对象(Brokered Distributed Objects,BDO)..................................33 3.7 局限.........................................................................................................................................33 3.8 相关工作.................................................................................................................................34 3.8.1 架构风格和模式的分类方法..........................................................................................34 3.8.2 分布式系统和编程范例..................................................................................................35 3.8.3 中间件..............................................................................................................................35 3.9 小结.........................................................................................................................................35 第 4 章 设计 Web 架构:问题与洞察力..........................................................................................37 4.1 万维网应用领域的需求.........................................................................................................37 4.1.1 低门槛..............................................................................................................................37 4.1.2 可扩展性..........................................................................................................................37 4.1.3 分布式超媒体..................................................................................................................38
5 4.1.4 Internet 规模....................................................................................................................38 4.1.4.1 无法控制的可伸缩性..............................................................................................38 4.1.4.2 独立部署..................................................................................................................38 4.2 问题.........................................................................................................................................39 4.3 推导方法(Approach)..........................................................................................................39 4.4 小结.........................................................................................................................................40 第 5 章 表述性状态转移(REST).................................................................................................41 5.1 推导 REST...............................................................................................................................41 5.1.1 从“空”风格开始..........................................................................................................41 5.1.2 客户-服务器....................................................................................................................41 5.1.3 无状态..............................................................................................................................42 5.1.4 缓存..................................................................................................................................42 5.1.5 统一接口..........................................................................................................................44 5.1.6 分层系统..........................................................................................................................44 5.1.7 按需代码..........................................................................................................................45 5.1.8 风格推导小结..................................................................................................................46 5.2 REST 架构的元素...................................................................................................................46 5.2.1 数据元素(Data Elements)..........................................................................................46 5.2.1.1 资源和资源标识符(Resources and Resource Identifiers).................................47 5.2.1.2 表述(Representations)........................................................................................48 5.2.2 连接器(Connectors)...................................................................................................49 5.2.3 组件(Components).....................................................................................................50 5.3 REST 架构的视图...................................................................................................................51 5.3.1 过程视图(Process View)............................................................................................51 5.3.2 连接器视图(Connector View)....................................................................................52 5.3.3 数据视图(Data View).................................................................................................53 5.4 相关工作.................................................................................................................................54 5.5 小结.........................................................................................................................................55 第 6 章 经验与评估...........................................................................................................................56 6.1 Web 标准化.............................................................................................................................56 6.2 将 REST 应用于 URI..............................................................................................................57 6.2.1 重新定义资源..................................................................................................................57 6.2.2 操作影子(Manipulating Shadows).............................................................................57 6.2.3 远程创作(Remote Authoring)....................................................................................58 6.2.4 将语义绑定到 URI..........................................................................................................58 6.2.5 REST 在 URI 中的不匹配...............................................................................................59 6.3 将 REST 应用于 HTTP...........................................................................................................59 6.3.1 可扩展性..........................................................................................................................59 6.3.1.1 协议版本控制..........................................................................................................60 6.3.1.2 可扩展的协议元素..................................................................................................60 6.3.1.3 升级..........................................................................................................................61 6.3.2 自描述的消息..................................................................................................................61 6.3.2.1 主机..........................................................................................................................61 6.3.2.2 分层的编码..............................................................................................................61
6 6.3.2.3 语义独立性..............................................................................................................62 6.3.2.4 传输独立性..............................................................................................................62 6.3.2.5 尺寸限制..................................................................................................................62 6.3.2.6 缓存控制..................................................................................................................63 6.3.2.7 内容协商..................................................................................................................63 6.3.3 性能..................................................................................................................................64 6.3.3.1 持久连接..................................................................................................................64 6.3.3.2 直写式(write-through)缓存................................................................................64 6.3.4 REST 在 HTTP 中的不匹配............................................................................................64 6.3.4.1 区分非权威的响应..................................................................................................65 6.3.4.2 Cookie......................................................................................................................65 6.3.4.3 必需扩展(Mandatory Extensions)......................................................................66 6.3.4.4 混合元数据(Mixing Metadata)..........................................................................66 6.3.4.5 MIME 语法..............................................................................................................66 6.3.5 将响应匹配到请求..........................................................................................................66 6.4 技术迁移.................................................................................................................................67 6.4.1 libwww-perl 的部署经验................................................................................................67 6.4.2 Apache 的部署经验.........................................................................................................67 6.4.3 开发顺从于 URI 和 HTTP/1.1 的软件...........................................................................68 6.5 架构上的教训.........................................................................................................................68 6.5.1 基于网络的 API 的优势..................................................................................................68 6.5.2 HTTP 并不是 RPC...........................................................................................................69 6.5.3 HTTP 并不是一种传输协议...........................................................................................70 6.5.4 媒体类型的设计..............................................................................................................70 6.5.4.1 一个基于网络的系统中的应用状态......................................................................70 6.5.4.2 增量处理..................................................................................................................71 6.5.4.3 Java vs. JavaScript....................................................................................................71 6.6 小结.........................................................................................................................................72 结论....................................................................................................................................................73 参考文献............................................................................................................................................75
论文摘要 7 论文摘要 架构风格与基于网络的软件架构设计 作者: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 客户端和服务器软件的后续部署等过程中学 到的经验教训。
绪论 8 绪论 抱歉……你说的可是“屠刀”? ——摘自《建筑师讽刺剧》(The Architects Sketch)[111] 正如 Perry 和 Wolf 的预言,软件架构成为了 20 世纪 90 年代软件工程研究的焦点。由于 现代软件系统的复杂性,更加有必要强调组件化的系统,其实现被划分为独立的组件,这些 组件通过相互通信来执行想要完成的任务。软件架构的研究探索了如何以最佳方式划分一个 系统、如何标识组件、组件之间如何通信、信息如何沟通、组成系统的元素如何能够独立地 进化,以及上述的所有东西如何能够使用形式化的和非形式化的符号加以描述。 一个优秀的架构并非凭空想象。所有架构级的设计决策应该根据被设计系统的功能、行 为和社会学等方面的需求来作出,这是一个原则,既适用于软件架构,同样也适用于传统的 建筑架构领域。“形式追随功能”的指导方针来自从数百年失败的建筑项目中获得的经验, 但是却常常被软件从业者忽视。上面引用的那句滑稽搞笑的话来自于 Monty Python 系列讽刺 剧,这是当一个建筑师在面对设计一个城市公寓区的目标时,头脑里所抱有的荒诞想法。他 想使用所有的现代屠宰场的组成部分来完成这个设计。这也许是他所构思过的最棒的屠宰场, 但是对于预期的房客来说却谈不上舒适,他们不得不战战兢兢地行穿行在安装着旋转刀头的 走廊中。 《建筑师讽刺剧》里的夸张说法也许看似荒唐可笑,但是考虑到我们是如此频繁地看到 软件项目一开始就采用最新时髦的架构设计,到后来却发现系统的需求实际上并不需要这样 一种架构。design-by-buzzword(按照时髦的词汇来做设计)是一种常见的现象。至少在软 件行业中,很多此类行为是由于对一组特定的架构约束为什么是有用的缺乏理解。换句话说, 当选择那些优秀的软件架构来重用时,这些架构背后的推理过程(reasoning),对于设计者 来说并非是显而易见的。 这篇论文探索了在计算机科学的两个研究学科(软件和网络)边界上的连接点。软件研 究长期以来关注软件设计的分类和对于设计方法学的开发,但是极少能够客观地评估不同的 设计选择对于系统行为的影响。网络研究则恰恰相反,集中于系统之间普通的通信行为的细 节和提高特殊通信技术的性能,却常常忽略了一个事实,即改变一个应用的交互风格对于性 能产生的影响要比改变交互所使用的通信协议更大。我的工作的动机是希望理解和评估基于 网络的应用的架构设计,通过有原则地使用架构约束,从而从架构中获得所希望的功能、性 能和社会学几方面的属性。当给定一个名称时,一组协作的架构约束就成为了一种架构风格。 这篇论文的前三章定义了一个通过架构风格来理解软件架构的框架,揭示了架构风格如 何能够被用来指导基于网络的应用的架构设计。当将常见的架构风格应用于基于网络的超媒 体的架构时,将会导致一系列架构属性,根据这些架构属性来对架构风格进行调查和分类。 然后使用得到的分类来识别出一组能够改善早期万维网的架构的架构约束。 如同我们在第 4 章中所讨论的,设计 Web 的架构就必须要理解 Web 的需求。Web 是旨 在成为一个 Internet 规模的分布式超媒体系统,这意味着它的内涵远远不只仅仅是地理上的 分布。Internet 是跨越组织边界互相连接的信息网络。信息服务的提供商必须有能力应对无 法控制(anarchic)的可伸缩性的需求和软件组件的独立部署。通过将动作控制(action controls)内嵌在从远程站点获取到的信息的表述之中,分布式超媒体为访问服务提供了一 种统一的方法。因此 Web 的架构必须在如下环境中进行设计,即跨越高延迟的网络和多个 可信任的边界,以大粒度的(large-grain)数据对象进行通信。 第 5 章介绍并详细描述了为分布式超媒体系统设计的表述性状态转移(REST)的架构 风格。REST 提供了一组架构约束,当作为一个整体来应用时,强调组件交互的可伸缩性、
分享到:
收藏