----注:此文为转摘
摘要
:Web服务从诞生到现在已有十余年历史,人们用它来解决不同平台之
间的互操作问题。传统的Web服务的是基于RPC风格的,其实现技术主要包含SOAP、WS标准栈等。RPC风格的Web服务在相对封闭,用在Web这个
分布的、开放的环境中将带来一些问题,如技术架构复杂、可伸缩性差等。研究的REST式风格Web服务足以解决上述问题。
关键字
:Rest 、架构
、web服务、HTTP、URI
引
言:REST风格是由HTTP协议的编写者Roy Thomas
Fielding在他的博士论文中正式提出的,一种现代Web架构模型,用来指导Web的设计、定义和部署。REST也可以说是HTTP和URI这两个
Web架构基础协议背后的设计原理,基于REST风格来设计Web应用的架构,就是最大限度利用HTTP和URI潜力的最佳实践。其实当HTTP被发明出
来的时候,REST就已经存在了,只是后来的Web开发模式越来越背离HTTP的本质,舍本逐末的追求了RPC模型。利用REST风格构建的Web服务可
以充分利用Web的特性,解决传统的构建Web服务带来的问题。
1.Rest架构的介绍
REST(Representational
State Transfer)是Roy
Feilding的博士论文中提出的概念,它是Web系统体系结构设计原则的一种描述,一种基于资源的服务访问架构。Roy
Feilding在他的论文中对REST的定义是:REST
的目的是决定如何使一个良好设计的Web程序向前进行,用户可以通过选择一个带有超链接的Web页面上的超链接(代表状态迁移),使得另一个Web页面
(代表程序的下一个状态)返回到用户,使得Web程序能进一步运行。例如:客户请求某火车站的购票服务,返回结果的页面中包含有火车班次和时刻表两个链
接,则这两个链接是对服务端提供资源的表(Representational)。得到返回结果后,客户选择一个链接来决定下一步动作,这意味着客户的状态
也随着迁移。这样客户可以维护自己的程序状态。
2. REST
与CRUD原则的关系
REST
软件架构遵循了CRUD原则,该原则告诉我们对于资源(包括网络资源)只需要四种行为:创建(Create)、获取(Read)、更新(Update)和
销毁(DELETE)就可以完成对其操作和处理了。其实世界万物都是遵循这一规律:生、变、见、灭。所以计算机世界也不例外。这个原则是源自于我们对于数
据库表的数据操作:insert(生)、select(见)、update(变)和delete(灭),所以有时候CRUD也写作为RUDI,其中的I就
是insert。这四个操作是一种原子操作,即一种无法再分的操作,通过它们可以构造复杂的操作过程,正如数学上四则运算是数字的最基本的运算一样。
3. 构建基于REST方式的Web服务
Web 服务技术让应用程序可以用平台独立或编程语言独立的方式相互通信。但是传统的XML- RPC 风格的Web 服务, 正逐渐受到复杂性恶魔的威胁, 称作REST 风格的Web Services 提供了更简单的替代方式。
在基于REST 方式Web系统中,所有资源都有一个URI,包括Web服务也用URI来标识。用以资源标识的URI最好是逻辑URI(例:http://www.anyshop.com/5686),而不是物理URI(http://www.anyshop.com/5686.html
)。
使用逻辑URI的好处是对服务器端的资源修改不影响客户的使用。使用 HTTP的CET、POST、PUT和DELEIT 4个动作作为资源的通用接口,用户通过它们访问资源。在此,HTTP作为一个程序协议来使用,而不是只作为传送一个SOAP消息的传输协议来使用。
以某零件公司的零件仓库Web服务为例来解释REST Web服务的基本思想。部署在服务器上的零件仓库对外发布一些服务,从而客户能够:
l 获取 一 份元件清单。
l 获取某个特定元件的详细信息。
l 提交一个采购清单(OP)。
l 获取元件清单
由
于 基 于
REST的Web服务可以通过一个URI来访问,因此调用一个Web服务就十分简单。顾客在订购单(Order1)里需要获得零件的列表,假设有一个
Web服务PartsList实现此功能,那么使用http://www.anycorp.com/PartsList即可得到零件列表。客户只需这样调
用,至于服务器端如何实现,对客户来说是透明的。因为对客户是透明的,所以服务器可以自由的修改资源而不影响客户,实现了松散藕合的特性。
客户知道使用前面的URL 后,那么服务器将返回包含零件列表的一个文档,即:
<? xml version”1.0”>
<p:Parts xmlns:p=”http://www.anycorp.com
”
Xmlns:xlink=”http://www.w3.org/1999/xlink”>
<Part id = “00345” xlink:href = “http://www.anycorp.com/PartsList/00345”>
<Part id = “00346” xlink:href =“http://www.anycorp.com/PartsList/00346”>
</p:Parts>
返回的文档中包含了对各个零件的链接,客户选择合适的链接可以将该链接指向的资源迁移到客户,实现客户状态的自维护,这是REST的关键特征。获取某个特定元件的详细信息
如果想要以XML形式返回每个零件详细的信息,只需在URL后加上零件编号参数,比如http://www.anycorp.com/PartsList/00345,则会返回如下的文档:
<? Xml version=”1.0”>
<p:Part xmlns:p=”http://www.parts-depot.com
”
Xmlns:xlink=”http://www.w3.org/1999/xlink”>
<Part-ID>00345</Part-ID>
<Name>Widget-A</Name>
<Description>This part is used within the frap assembly</Description>
<Specification xlink:href=”http://www.anycorp.com/PartsList/00345/specification
”/>
<UnitCost currency=”USD”>0.10</UnitCost>
<Quantity>10</Quantity>
</p:Part>
从以上返回的数据看,这个数据又链接到更多的数据。客户可继续选择这些链接以获得更详细的数据,这正是REST的关键所在。
提
交一个采购清单(OP),这个服务利用一个指向PO提交的URL。客户依照零件仓库预先定义的PO格式创建一个PO实例文档。客户将PO.xml作为
HTTP POST承载的内容提交上来。PO服务响应此PO提交请求,从而客户可以随时检索、更新、编辑这个PO。PO
于是成为客户端与服务器端共享的一段信息。共享信息(PO)由服务器端指定的URL访问,并暴露为一个Web服务。
4.REST Web服务设计原则
(1) 以REST构建Web服务的关键是要正确识别作为服务的资源。
(2) 为每个资源提供URL,资源应该是名词,不是动词。
(3) 根据客户处理资源的方式分类,可以分为客户仅接收资源的表现性和客户能够修改(增加)资源。对于前者,提供HTTP GET 方法访问,对于后者,提供HTTP POST,PUT和DELETE。
(4) 所有通过HTTP CET访问的资源应该是不可更改的。即是说,这些资源仅仅向客户返回一个资源的表现性,客户调用他们不能更改它们。
(5) 没有孤立的表现性。换言之,在资源的表现性中提供链接,让客户能更深人的获取更多的信息,或者相关信息。
(6) 逐步的提供数据,不应该在一个文档里提供所有的内容,可以为更详细的信息提供链接。
因为REST是对当今Web体系结构设计原则的一种描述,所以REST的目标和原则是对当今Web中已经成功应用的要素的总结。
4. 总结
本文描述了基于REST的Web服务设计原则和特点,以及构建基于REST的Web服务的思想。通过对REST的理解,REST必然会对Web服务的体系结构产生重要的影响基于REST 的Web服务必将推进当前Web服务技术的大规模应用和进一步发展。
相关推荐
传统的Web服务大多采用基于RPC交互模型,该模型在相对... 最后将论文的研究成果应用于直升机数字化工程的信息编码管理系统中,应用表明:基于REST的Web Services可以降低了Web服务的耦合度,提高了系统的可靠性和可伸缩性。
基于面向对象思想的REST风格Web服务设计方法,安骐,卞佳丽,移动互联网领域飞速发展,也给移动互联网产品开发者提出了新要求。如何适应高速迭代,开放的移动互联网开发节奏,这是一个急需面
本谷歌Chrome扩展程序可以帮助开发人员开发和测试REST风格的Web服务API与所有支持的方法,比如GET,POST,PUT,PATCH,DELETE 和 OPTIONS。 该扩展程序支持HTTP基本身份验证,支持多种头部信息和响应格式。 本扩展...
基于REST的Web服务客户端是一款功能强大的谷歌浏览器插件,使用基于REST的Web服务客户端(模拟REST客户端)可以让用户使用谷歌浏览器模拟REST请求来测试REST风格,这款插件使用非常方便,欢迎大家来下载使用!
WEB框架——REST原理(架构风格与基于网络的软件架构设计)
基于REST架构风格的Web+20实现.pdf
用于C#的基于ReST的Web服务。
REST风格和基于SOAP的WebServices的比较与结合
基于Ajax/REST的Web架构的研究,高尚,,REST是一种被实践证明的适用于Web应用的架构风格,但是在传统的开发方法中,要完全实现REST架构,却存在着各种困难。近年来,Ajax技术
基于REST的分布式系统中会话与角色管理的研究,程曦,邹华,首先对REST风格的分布式web系统进行了介绍,接着对REST风格和普通的分布式Web系统进行了对比,指出REST风格具有的优势以及在会话管理与
· 了解对基于SOAP和基于REST的Web服务的安全要求 · 学习如何在各种环境下部署JAX-WS服务 不管是学生还是有经验的程序员,当你需要立即运用这些技术展开工作时,《Java Web服务:构建与运行》都是你需要的一...
Java Web服务:构建与运行 作 者: (美)卡林 著,任增刚 译 出 版 社: 电子工业出版社 ...第4章 REST风格的Web服务 第5章 Web服务安全 第6章 Java应用服务器中的JAX-WS 第7章 除了争论,还有什么 索引
Java Web服务:构建与运行 作 者: (美)卡林 著,任增刚 译 出 版 社: 电子工业出版社 ...第4章 REST风格的Web服务 第5章 Web服务安全 第6章 Java应用服务器中的JAX-WS 第7章 除了争论,还有什么 索引
1.5.2ArcGIS Server发布的服务类型 1.5.3服务发布 1.5.4Web服务的URL及元数据 1.5.5查看地图 1.5.6使用ArcGIS Server REST风格Web服务的过程 1.5.7支持的输出格式 第2章ArcGIS API for JavaScript基础 2.1ArcGIS API...
基于Spring的,提供多种通信风格的Web服务源码与分析。该程序提供了Rest(Jersey)、RMI(Castor)、Flex(Blazeds)三种通信方式的支持。并提供了设计和代码分析的文档。文档版权归作者所有,如果使用文档中的全部...
web之父的博士论文,Restful API的最佳描述。这篇论文定义了一个框架,...然后我介绍了表述性状态转移(Representational State Transfer,REST)的架构风格,并且描述了如何使用REST来指导现代Web架构的设计和开发。
Java Web服务:构建与运行 作 者: (美)卡林 著,任增刚 译 出 版 社: 电子工业出版社 ...第4章 REST风格的Web服务 第5章 Web服务安全 第6章 Java应用服务器中的JAX-WS 第7章 除了争论,还有什么 索引
1.5.6使用ArcGIS Server REST风格Web服务的过程 1.5.7支持的输出格式 第2章ArcGIS API for JavaScript基础 2.1ArcGIS API for JavaScript版的Hello World 2.2ArcGIS API for JavaScript与Dojo 2.2.1ArcGIS API for ...
然后我介绍了表述性状态转移(Representational State Transfer,REST)的架构风格,并且描述了如何使用REST来指导现代Web架构的设计和开发。 REST强调组件交互的可伸缩性、接口的通用性、组件的独立部署、以及用来...