




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、REST和SOAP的“风格”比较REST和SOAP的“风格” 架构风格:来自Roy Thomas Fielding博士的定义:一种架构风格是一组协作的架构约束,这些约束限制了架构元素的角色和功能,以及在任何一个遵循该风格的架构中允许存在的元素之间的关系。SOAP:简单对象访问协议,基于XML,是一种应用协议,可以跨多种传输协议来传递消息(比如HTTP、SMTP),Soap是针对RPC的解决方案。其初衷是作为一种轻量级解决方案出现的,采用xml格式定义过程调用和返回,一个Soap消息就是一个特定格式和内容的XML文档。Restful web service:Rest 是针对Web提出的一种架构风
2、格,Restful web service本质上就是Web,任意一个URL地址,一个HTTP网页都可以称作是Restful web service。Rest把网络上的所有事物抽象为资源,把对资源的操作抽象为CRUD,对应HTTP的PUT,Get,Post,Delete。注意此处的资源不是静态的数据,而是数据加上状态,是随时间变化的,每个资源有一个唯一的标识,URL。Rest提出了一些设计概念和准则: 1、网络上的所有事物都被抽象为资源(resource); 2、每个资源有一个
3、唯一的资源标识(resource identifier); 3、通过通用的连接器接口(generic connector interface)对资源进行操作; 4、对资源的各种操作不会改变资源标识; 5、所有的操作都是无状态的(stateless)。REST依赖一套简单的“动词”,把所有的复杂性都转移到了指定资源的“名词”中。与此不同,SOAP却有一套相当复
4、杂的XML格式化命令和数据传输选项。 在Web服务发展的初期,XML格式化消息的第一个主要用途是,应用于XML-RPC协议,其中RPC代表远程过程调用。在XML远程过程调 用(XML-RPC)中,客户端发送一条特定消息,该消息中必须包括名称、运行服务的程序以及输入参数。相反, REST风格的请求却不关心正在运行的程序是什么,它仅仅请求命名资源。 XML-RPC只能使用有限的数据类型种类和一些简单的数据结构。人们认为这个协议还不够强大,于是就出现了SOAP其最初的定义是简单 对象访问协议。之后,大家逐渐意识到SOAP其实并不简单,而且也不需要必须使用面向对象语言,所以,现在人们只是沿用
5、SOAP这个名称而已。 XML-RPC只有简单的数据类型集,取而代之,SOAP是通过利用XML Schema的不断发展来定义数据类型的。同时,SOAP也能够利用XML 命名空间,这是XML-RPC所不需要的。如此一来,SOAP消息的开头部分就可以是任何类型的XML命名空间声明,其代价是在系统之间增加了更多的复杂 性和不兼容性。 另外,非常重要一点是,REST是需要请求HTTP的,与其相比,SOAP更具优势,SOAP消息可以由所有能够处理Unicode文本的传 输方式来传送,很可惜,这一点通常不被人们所认可。事实是,由于HTTP穿透防火墙的便捷性,以及开发商们对Web非常熟悉,因此,人们还在继续
6、强调着 HTTP传输。 随着计算机行业的觉醒,人们发现了基于XML的Web服务的商业潜力,于是,各家公司开始不断地发掘想法、观点、论据以及标准化尝试。W3C 曾经设法以“Web服务活动”的名义来组织成果展,其中也包括实际做出SOAP的XML协议工作组(XML Protocol Working Group)。与Web服务有关的标准化成果从某种程度上说与SOAP相关或者依赖于SOAP的数量已经倍增了到了令人惊讶的程度。 最初,SOAP是作为XML-RPC的扩展而发展起来的,它主要强调的是,通过从WSDL文件中所获得的方法和变量名来进行远程过程调用。现 在,通过不断进步,人们发现了更多的使用SOAP
7、的方式,而不仅仅是采用“文件”方式基本上是使用一个SOAP信封来传送XML格式化文件。无论如 何,要掌握SOAP,了解WSDL所扮演的角色是最根本的。通过http请求的Accept Header字段来表示。针对SOAP Web服务的WSDL1.1仅支持HTTP POST方法。WSDL2.0通过包括对http get绑定的支持对此进行了补充。另请注意,HTTP delete、put、trace和options方法是用并不频繁,而且经常被防火墙阻止。 Soap与Rest区别:1
8、160; Soap也可以看作是一种风格,面对的应用需求是RPC,而Rest面对的应用需求是分布式超媒体系统(Web)。2 Rest架构风格更强调数据,请求和响应消息都是数据的封装。而Soap风格更强调接口,Soap消息封装的是过程调用。REST是面向资源的,而Soap是面向接口的。3
9、160; REST架构下,HTTP是承载协议,也是应用协议,而Soap架构下,HTTP只是承载协议,Soap才是应用协议。 Soap与REST的应用场合:1 过程调用用soap。如果服务是作为一种功能提供,客户端调用服务是为了执行一个功能,用Soap,比如常见的认证授权。而数据服务用REST。2 可以定义清晰明了的正式接口的情况下,用Soap,比如在企业应用中,系统间的耦合采用面向接口的方式。3 要更多的考虑非功能需求,比如安全、传输、协作等需求,使用Soap。
10、160; 4 低带宽,客户端的处理能力受限的场合,比如在PDA,手机上消费服务,用REST。REST与SOAP之比较REST篇REST能够在计算机领域被广泛采用,它走的道路是不同寻常的。这个术语是由Roy Fielding创造的。在Web方面,我们必须承认Fielding是非常精通的,他曾经帮助创建HTTP 1.0规范,该规范从1996年开始就为Web提供基本准则。我有这样一个推断,在计算机世界中,但凡那些让开发人员记住的重要概念,都有一个很酷的名称首字母缩写,否则的话,开发人员很快就会将其抛之脑后。比如Ajax、SOAP以及REST就证明了这一点。REST能够在计算机领域被广泛采
11、用,它走的道路是不同寻常的。这个术语是由Roy Fielding创造的。Fielding毕业于Irvine市加利福尼亚大学,在他的博士学位论文中第一次提出了REST这个概念。在Web方面,我们 必须承认Fielding是非常精通的,他曾经帮助创建HTTP 1.0规范,该规范从1996年开始就为Web提供基本准则。他在Web标准方面非常有经验,这为他的这篇博士论文奠定了坚实的基础。Fielding指出,使用且符合代表性状态传输(REST)设计约束的 Web 上部署的组件,可以充分利用 Web 的有用特性,万维网(World Wide Web)才能够达到最佳的工作效果。可以这样理解REST当一个浏
12、览器得到并且显示构成HTML页面的各个元素时,它正在获取资源的当前状态的表现形 式。在Fielding的博士论文中,他列举了REST风格的设计约束,并且解释了为什么这些约束能够充分利用Web 的有用特性,使其达到最佳状态,以及这些约束的关键所在。同时,在论文中,他也包含了一些关于REST和某些目前的Web风格之间 “不符合”的讨论,以及这些Web风格是如何导致设计无法利用Web特性的。Fielding认为,对于使用HTTP承载应用程序协议穿越防火墙,XML-RPC 和SOAP所采用的方式是“从根本上被误导的概念。”它们所采用的方式违背了设立防火墙的概念,结果是,防火墙厂商为了保护系统需要侦察出
13、所承载的协议。 由于大多数SOAP应用程序使用HTTP都是为了穿越防火墙,因此,你可以发现REST与SOAP之间的冲突是从哪里开始的。Fielding认为,如果 你打算使用HTTP的话,就应该与充分利用HTTP本身的含义。REST风格强调,通过有限的操作或者是“动词”以及一个组件之间的标准接口,也就是HTTP协议提供的借口,来提升客户与服务之间的交互。通 过为每一个资源分配其自己的URL,来实现灵活性,REST可以调用包含上百个URI的资源类型的客户,其中的关键是REST能够给你无限多的“名词”。 REST使用HTTP的动词简单的良定义操作集:POST, GET, PUT,DELETE进行请求
14、和响应,从而避免了歧义。举个例子,GET只能够简单地返回资源的表现形式,而不能够创建任何其他的内容。在Web发展的初期,由于人们都在试验通过收集各种不同来源的元素,从而把Web应用程序融合在一起,有大量这种Web服务的不成熟探索的例子 从HTTP页面中解析信息,用于页面创建者没有计划到的用途。这种“屏幕抓取”的Web类比表明,REST风格的方法是先于那些更加复杂的Web服务 而出现的。REST是一种风格而不是一个标准你可能会把软件的架构风格当作对上层设计模式的抽象。然而,根据Fielding所说,设计模式的堆砌并不等同于架构风格,因为模式是非常接近于特定问题的。由于REST是超文本系统的一种风
15、格,而不是Web服务的,因此,本文的标题“REST与SOAP之比较”就有些让人误解。然而,很多软件设计 人员会将其混淆,他们在考虑如何创建Web服务时,会得出这样的结论:SOAP过于复杂,而简单的类似于REST的设计却更加适合。REST与RPC风格之比较远程过程调用的架构,是应用在基于XML-RPC或者 RPC风格的SOAP的Web服务中的,它却有着完全不同的风格。客户端发出命令,以使服务做出特定的操作。换句话说,RPC有动词的倾向。REST强调资源(名词)有统一的接口以此来对它们寻址,而RPC强调过程(动词)有统一的接口来激发它们。一个基于RPC的架构,动词数量是 没有限制的。REST说,我
16、们使用四个动词非常熟悉,HTTP标准的GET、POST、PUT以及DELETE来进行请求和响应,REST使用资 源寻址来处理其可变性。一个简单的REST举例假设我们希望一个Web服务暴露一部分目录,从这个目录中,用户将能够得到一些描述、图片、安装指令等等。为了得到数字“n1996-01”的描述,用户需要格式化一个GET请求,类似于下面的这个URL:在处理这个请求时,“/catalog”将映射到一个服务中,之后,通过该服务对“description/n1996-01”进行解释,从而 定位资源。在创建响应时,服务需要使用内容类型(Content-Type)的头文件来指定返回格式。在这种情况下,假定
17、返回格式是HTML或者XML, 客户端能够使用它来控制页面的布局。如果要得到图片,那么这个请求将对“/catalog/picture/n1996-01”进行寻址,返回的响应将是 图片内容类型(Content-Type)。REST的商业应用最近几年,大多数Web商业企业开始对REST非常感兴趣。Google Data API(目前还在测试版本)专门使用REST规则来提供简单的协议。对服务的HTTP GET请求的响应结果是,采用Atom或者是RSS联合格式的XML数据。Google也使用Atom以及POST、PUT和DELETE操作来完成公共 协议。eBay服务提供通过使用不同语言工具来访问服务,
18、这些工具包括文档/文字风格的SOAP以及REST风格。那么,对于XML-RPC和SOAP所具有的RPC风格而言,REST风格是否是一个具有竞争力的替代者呢?当然,我决不这样认为,在下一篇文章中,我将尽量向大家展现SOAP所向无敌的领域。如今,Web开发者的可选技术相当之多;从简化的数据库访问技术,到易用的中间件服务包装技术,以及各种有趣的客户端软件等等,一应俱全。所有这些产品和工具,都是为了帮助Web开发者用最快的速度开发出最好的Web应用。然而,拥有大量可选软件方案以及为Web应用的特定部分选用特定方案,都是具有挑战的事;而且,现在Web开发者必须持续跟踪各种不断变化着的标准与方法。举个例子
19、,Web服务技术就有SOAP(Simple Object Access Protocol,简单对象访问协议)和REST(Representational State Transfer,表示性状态转移)这两种方案。它们都是有效的方案,但在具体场合下采用哪种方案好,这要取决于Web开发者。目前,大部分Web开发者似乎都了解REST一种采用标准URI进行调用的方案。REST很容易理解,而且只要是支持HTTP/HTTPS的客 户端/服务器就支持它。你可以用HTTP GET方法来执行命令。所以,开发者们感受到的REST的优势是:开发简单、只需依托现有Web基础设施、以及学习成本低。然而,SOAP作为一种
20、古老的Web服务技术,短期内还不会退出历史舞台。而且,随着SOAP 1.2的出现,SOAP印象中的一些缺点已得到改进,采纳率和易用程度也都得到提高。另需注意的是,从W3C SOAP 1.2版开始,SOAP这一缩写不再代表Simple Object Access Protocol(简单对象访问协议),而是仅仅作为协议名称而已。相对REST而言,SOAP 1.2多出一些开销,不过这些开销也带来了一些好处。首先,SOAP在三个方面离不开XML(Extensible Markup Language,可扩展标记语言):SOAP信封(envelope)是基于XML的,它定义了消息里有什么以及如何处理它;一
21、套用于数据类型的编码规 则;过程调用和响应的规划。SOAP信封由传输协议(HTTP/HTTPS)发出,RPC(Remote Procedure Call,远程过程调用)得到执行,然后一个XML文档随SOAP信封返回。需要注意的是,基于“通用”传输协议是SOAP的一个优点。REST目前基于HTTP/HTTPS;而SOAP可支持任何传输协议,从HTTP /HTTPS到SMTP(Simple Mail Transfer Protocol,简单邮件传送协议),甚至JMS(Java Messaging Service,Java消息传递服务)。不过,由于XML较为冗长且解析费时,因此采用XML也成为一个弊
22、端。不过,对Web开发者来说的好消息是,目前上述两种方案都是行之有效的方案。REST和SOAP都能解决许多Web方面的问题与挑战,而且在许多情况下,它们各自都能满足开发者的要求,也就是说可互换使用。但很多人不知道,这两种技术可以混合搭配使用。REST很好理解,且极易上手;不过由于它缺乏标准,因此只被看作是一种架构方法。与之相比,SOAP是一个工业标准,它具备良好定义的协议,以及一套良好确立的规则,在大型和小型系统中均有采用。因此,REST的适用场合包括:· 有限的带宽和资源 别忘了返回的结构可以采用(由开发者定义的)任何格式。另外,由于REST采用标准的GET、PUT、POST和DE
23、LETE动词,因此可被任何浏览器所支持。除此以外,REST还可以使用为目前大多数浏览器支持的XMLHttpRequest对象,这为AJAX增色不少。· 完全无状态的操作 对于那些需多步执行的操作,REST并非最佳选择,采用SOAP更合适。但是,如果你需要无状态的CRUD(Create/Read/Update/Delete,创建/读取/更新/删除)操作,那么应采用REST。· 缓存考虑 若要利用无状态操作的特性,使得信息可被缓存,那么REST是很好的选择。以上已经覆盖很多方案了,那么,为什么还要考虑SOAP呢?正如前述,SOAP比较成熟而且是经过良好定义的,具有完整的规范。而
24、REST只不过是一种方法,对开发未作任何规约;因此,假如你遇到以下场合,那么SOAP是最佳选择:· 异步处理与调用 如果你的应用需要确保可靠性与安全性,那么请采用SOAP。SOAP 1.2为确保这种操作补充定义了WSRM(WS-Reliable Messaging)等标准。· 形式化契约 若提供者/消费者双方必须就交换格式取得一致,那么采用SOAP更合适。SOAP 1.2为这种交互提供了严格的规范。· 有状态的操作 如果应用需要上下文信息与对话状态管理,那么应采用SOAP。SOAP 1.2为此补充定义了WS-Security、WS-Transactions和WS-
25、Coordination等标准。相比之下,REST方法要求开发者自己来实现这些框架性工作。正如你所看到的,REST和SOAP各自有其用武之地。它们在安全性和传输层等方面有着自己的潜在问题,不过它们都能完成任务,而且在许多情况下, 它们都丰富了Web的技术手段。因此,就这一论题,其实最好的原则就是灵活性原则;因为至少在现今的Web开发中,无论面对何种问题,Web开发者们总有 办法运用好这两种技术中的一种。关于作者Mike Rozlog是Embarcadero科技公司的高级产品主管。他的主要工作是确保Embarcadero公司推出开发工具满足全世界开发者们的期望。他 的大部分时间被致力于从技术和业
26、务两个方面来介绍讲解Embarcadero的产品与服务,其听众是遍布全球分析师及其他听众。Mike曾工作于 CodeGear,一个于2008年被Embarcadero收购的开发工具团队。之前,他为Borland公司工作了八年,担任过包括首席技术架构师在 内的许多职位。作为一名知名作者,Mike出版了很多书。他最近的作品Mastering JBuilder已由John Wiley & Sons出版。REST与SOAP之比较SOAP篇作者: William Brogden, 出处:TechTarget,责任编辑: 叶江,2006-12-29 10:00本文的标题“REST与SOAP之比较”
27、确实有些让人误解。REST是代表性状态传输的名称首字母缩写,与 其说它是标准,不如说是一种风格。然而,在我的前一篇文章中,正如我们所讨论的,众多从事Web服务的软件设计师们认为SOAP过度复杂,于是,类似 eBay和Google的服务都采用了REST风格的约束来暴露其大量数据。本文的标题“REST 与SOAP之比较”确实有些让人误解。REST是代表性状态传输的名称首字母缩写,与其说它是标准,不如说是一种风格。然而,在我的前一篇文章中,正如我 们所讨论的,众多从事Web服务的软件设计师们认为SOAP过度复杂,于是,类似eBay和Google的服务都采用了REST风格的约束来暴露其大量数 据。查看
28、第一部分比较REST和SOAP的“风格”REST依赖一套简单的“动词”,把所有的复杂性都转移到了指定资源的“名词”中。与此不同,SOAP却有一套相当复杂的XML格式化命令和数据传输选项。在Web服务发展的初期,XML格式化消息的第一个主要用途是,应用于XML-RPC协议,其中RPC代表远程过程调用。在XML远程过程调用 (XML-RPC)中,客户端发送一条特定消息,该消息中必须包括名称、运行服务的程序以及输入参数。相反, REST风格的请求却不关心正在运行的程序是什么,它仅仅请求命名资源。XML-RPC只能使用有限的数据类型种类和一些简单的数据结构。人们认为这个协议还不够强大,于是就出现了SO
29、AP其最初的定义是简单对 象访问协议。之后,大家逐渐意识到SOAP其实并不简单,而且也不需要必须使用面向对象语言,所以,现在人们只是沿用SOAP这个名称而已。XML-RPC只有简单的数据类型集,取而代之,SOAP是通过利用XML Schema的不断发展来定义数据类型的。同时,SOAP也能够利用XML 命名空间,这是XML-RPC所不需要的。如此一来,SOAP消息的开头部分就可以是任何类型的XML命名空间声明,其代价是在系统之间增加了更多的复杂 性和不兼容性。另外,非常重要一点是,REST是需要请求HTTP的,与其相比,SOAP更具优势,SOAP消息可以由所有能够处理Unicode文本的传输 方
30、式来传送,很可惜,这一点通常不被人们所认可。事实是,由于HTTP穿透防火墙的便捷性,以及开发商们对Web非常熟悉,因此,人们还在继续强调着 HTTP传输。随着计算机行业的觉醒,人们发现了基于XML的Web服务的商业潜力,于是,各家公司开始不断地发掘想法、观点、论据以及标准化尝试。W3C曾 经设法以“Web服务活动”的名义来组织成果展,其中也包括实际做出SOAP的XML协议工作组(XML Protocol Working Group)。与Web服务有关的标准化成果从某种程度上说与SOAP相关或者依赖于SOAP的数量已经倍增了到了令人惊讶的程度。最初,SOAP是作为XML-RPC的扩展而发展起来的
31、,它主要强调的是,通过从WSDL文件中所获得的方法和变量名来进行远程过程调用。现 在,通过不断进步,人们发现了更多的使用SOAP的方式,而不仅仅是采用“文件”方式基本上是使用一个SOAP信封来传送XML格式化文件。无论如 何,要掌握SOAP,了解WSDL所扮演的角色是最根本的。Web服务描述语言或WSDL为了创建一个用于描述Web服务的XML格式化文件,Web服务描述语言(WSDL)标准提供了足够多的细节,以便能够构建出客户端代码,从而访问服务或者服务器端代码以提供服务。一个服务的WSDL文件将会为你提供以下几个方面的内容:· 用于访问服务的地址信息 · 用于传送信息的传输
32、协议(例如,通道数) · 用于所有可使用功能的名称和接口使用方法 · 在所有的请求和响应中所使用的数据类型2001年3月,W3C推出了WSDL 1.1版本用于讨论,这并不是最终确定的规范。W3C Web服务描述工作组目前正在开发该规范的2.0版本,基本上已经到了尾声。虽然,WSDL通常是用于特定的SOAP服务,但是,从理论说,它是完全可以 用于特定的REST风格的GET或者POST操作的。能够根据服务的WSDL描述来自动创建客户端和服务器端代码,支持这一功能的开发环境目前使用得很广泛,以便能够适用于Web服务器和Web服 务客户端的不同程序设计语言。如果你使用Google搜
33、索“SOAP IDE”的话,大概会出现上百万条相关信息。也有这样的工具,根据Java或C#对象来生成相应的WSDL和代码。自动生成代码也许能够使你的开发效率更 高,但是离优化却是越来越远。安全与SOAP如果企业使用SOAP来传送有价值的信息的话,那么,安全就是最重要的问题。由OASIS组织发起,计算机行业的领导者们已经联合开发了一套标准,称为WS-Security。这个标准对基本的SOAP通信做出了改善,以便能够处理以下几个问题:消息机密性由于拦截HTTP消息的方式非常多,因此,在请求和响应过程中,必须能够对所有重要信息加密。很幸运,现在的加密技术非常先进,我们能够对消息内容进行加密,以保证消
34、息不被修改。客户和服务身份必须能够核实SOAP请求来源的身份。结论在开发人员的意识里,对于Web服务的开发而言,REST和SOAP风格各有千秋。SOAP拥有更为详尽的标准化成果和开源工具。除此之外,现 在,有许多集成开发环境能够在现有代码的基础上,依据接口方法自动生成SOAP。如果你需要使用WSDL来发布你的服务,或者你需要一些安全功能如消息签 名和加密,那么,SOAP能够确保消息的安全性。另一方面,如果你希望使用简单接口来公布一些信息,而不需要繁琐的处理过程,那么,REST也许是最佳选 择。REST(Representational State Transfer)是HTTP协议的作者Roy
35、Fielding博士在其博士论文中提出的一种互联网应用构架风格。与以远程对象为核心的ORB和以服务为核心的SOA相比,以资源为核心的REST让我们从崭新的视角审视互联网应用。REST为互联网应用量身定做的简洁模型、与HTTP协议的完美结合、构架的高扩展性,为互联网应用构架设计和异构系统集成设计带来了一股清新的空气。语言生态环境计算机发展至今,产生了许许多多不同的语言,每种语言都定义了自己独特的生态环境。在这个生态环境内的程序共享相同的类 型系统、运行时环境、并发模型等。虽然所有程序的本质是相同的:从问题领域到机器领域的映射,但无法回避的是不同生态环境的程序很难跨越彼此的边界。同样 是int,在
36、A和B语言通常截然不同(CLR和JVM能部分解决类型共享问题),更不用说A语言具有但B语言不具有的某些语言特性(CLR和JVM没法解决)。当系统可以在单一的生态环境中自给自足时,跨越生态环境的问题并不存在;但在多数互联网应用中,系统的各个部分通常既是生产者又是消费者,必须要打破生态环境的界限才能相互协作。比如,A公司的Service A,需要对外提供服务,而Service A又依赖于B公司的Service B和C公司的Service C;由于无法保证不同公司都采用同样的语言,因此各服务的接口必须保证语言无关性。在我所了解的范围内,有3种跨域生态环境的方式:1.
37、0; ORB(Object Request Broker)以CORBA为代表,其核心概念是远程对象(remote object)。熟悉.Net Remoting的朋友应该能体会其风格(需要说明的是.Net Remoting只跨越微软的生态环境)。不同生态环境的程序可以像调用本地对象一样调用远程对象代理的方法,ORB会负责连接到远程的对象,并处理数据的序列化与反序列化。2. SOA其核心概念是服务(Service)。比如:我们要提供整数加法Web服务,我们会很自然地想到通过类似下面的url来表达服务接口:并通过xml结构表达结果:3.
38、160; REST其核心概念是资源(Resource)。在REST的世界中,没有服务的概念,同样是上面的例子,在REST的世界中,状态表述转移在REST的世界中,资源即状态,而互联网就是一个巨大的状态机:每个网页是其一个状态;url是状态的表述;REST风格的应用则是从一个状态迁移到下一个状态的状态转移过程。早期互联网只有静态页面的时候,通过超链接在静态网页间浏览跳转的page->link->page->link模式就是一种典型的状态转移过程。无状态服务器REST风格应用可以实现交互,但它却天然地具有服务器无状态的特征。在状态迁移的过程中,
39、服务器不需要记录任何Session,所有的状态都通过url的形式记录在了客户端。PS:更准确地说,这里的无状态服务器,是指服务器不保存会话状态(Session);而资源本身则是天然的状态,通常是需要被保存的;本文提到的无状态服务器均指无会话状态服务器。举个例子:一个心理测试的应用,需要用户做2次选择题,每次可选A、B两种答案,2次选择完毕之后将告知用户属于何种心理类型。如果按ORB或SOA的服务思维,很容易想到在服务器端保存Session,每次选择以后修改Session,根据Session产生结果。但如果以REST的状态表述转移模型为指导,我们会自然地得出这样设计:每一个页面表示一个状态(存在
40、于客户端),页面包含了到下一个页面的超链接,每当用户选a或选b时分别转移到下一个相应的状态。这样,所有的会话状态其实都是通过url的形式保存在了客户端,服务器端实现了无状态。另外,需要说明的是,虽然上图有7个状态,但并非一定需要在服务器预先生成7个静态页面,它们完全可以是动态页面,这不影响状态转移的概念模型以及服务器无状态的特征。有构架设计经验的朋友应该很清楚,与有状态服务设计相比,无状态服务容易实现系统性能的横向扩展。通过增加硬件,部署多个无状态服务,并进行load balance不会受到制约;而有状态服务模式,Session的存储、共享都会带来性能瓶颈,且无法通过增加硬件消除。Google
41、搜索就是一个典型的无状态服务。试想一下,当你搜索“周杰伦”以后,Google提示你有数百万的结果,并每10条一页分成若干 页,Google会把结果保存进服务器Session吗,然后当你翻页的时候,再从Session中取吗?显然这样庞大的Session,即使是 Google也无法承受。来看看Google的url:第一页:;hl=zh-CN&newwindow=1&start=0&sa=N 第二页:;hl=zh-CN&newwindow=1&start=10&sa=NGoogle把搜索结果的每一页视为资源(状态),并通过url来表示,同一搜索关键字的
42、不同分页通过start参数来进行区分。当你从第一页点击第二页 的链接时,只是从一个状态跳到了下一个状态而已;对于Google而言,其实是一条新的查询(按REST的观点,获取新的资源),而两次查询很可能是由不 同的服务器在处理,而用户却感觉Google似乎记住了会话。从上面的例子中,我们初步体会到了一点REST风格的味道。但需要说明,REST风格包含了无状态服务器的特征;但反过来,并非具有无状态服务器特征的都是REST。SOA同样可以是无状态的,REST的核心还是资源。RIA+REST,琴瑟合鸣2009-05-17 23:43 by Flyingis, 3649 visits, 网摘, 收藏,
43、编辑 Flyingis 在当前IT概念名词漫天飞舞的年代,REST+RIA已经开始逐渐成为一种开发应用模式的标准,并越来越多的在各种实际业务中得到应用。 记得第一次看到REST的身影,是在InfoQ上的一篇介绍,随后又翻阅了后面的参考文章和Developerwork上一些资料,甚至随手翻了翻Roy博士的论文。 所幸,在不少人还在体会REST到底是何方神圣的时候,我拿到并安装了最新版的ArcGIS Server 9.3,里面新增了一种新的GIS服务:ArcGIS Server REST服
44、务。有了这样的一个落地的基于REST的服务,所有对REST基础概念的疑惑都迎刃而解:为所有“事务”定义ID;将所有“事务”链接在一起; 使用标准方法;资源多重表述;无状态通信(摘抄自InfoQ)。所以,学习开发或开发理念,看文字没有看图片快,看图片没有动手操作快,动手操作没有导师亲自指导快,对于REST的学习,我对生涩的文字概念的理解时间被压缩到了最小。 ArcGIS Server REST服务的组织结构: 今天看到一则新闻,纽约时报通过Times Developer Network构建了一个基于REST的API,请求AP
45、I之后将得到XML和JSON格式的返回数据,这些API包括: Article Search API:能够搜索从1981年到现在纽约时报上的文章,可以获取标题、摘要及相关多媒体的链接Best Sellers API:能够获取纽约时报所有的最佳业绩数据,包括特定销售商的等级历史 Campaign Finance API:根据美国联邦选举委员会的备案获取总统选举的捐助及花费数据Community API:获取NYT用户发表的评论Congress API:获取美国议会投票数据,包括具体议院和参议院议员的信息Movie Reviews API:获取到评论和纽约时报评论家的链接以及根据关键字搜索电影评论New York State Legislature API:获取纽约州参议院及大会的议员和委员会信息Real Estate API:获取纽约市房地产及销售情况的聚合数据Times Newswire API:获取最新时报文章的链接和元数据TimesPeople API:获取时报读者的信息及活动数据TimesTags
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年社交活动创新创业项目商业计划书
- 办公室消防安全检查清单
- 【2025年】宕昌事业单位考试笔试试卷【附答案】
- 电解铝生产工艺优化方案
- 地下停车场施工技术方案
- 2025年介入治疗护理试题及答案
- 女生读书分享语
- 教育创新实践分享-教育专家演讲
- 数字营销内容创作技巧分享
- 智慧城市出行未来-交通规划在智能可持续出行中的影响
- 变电站调试报告
- 2025-2030年中国铅酸蓄电池行业市场现状供需分析及投资评估规划分析研究报告
- 叮当快药大健康生态圈战略解析
- 塔里木油田分公司新疆塔里木盆地吐孜洛克气田开采矿山地质环境保护与土地复垦方案
- DB21-T1642-2024-镁质耐火原料及制品单位产品能源消耗限额-辽宁省
- 2025年陕西蒲城清洁能源化工有限责任公司招聘笔试参考题库附带答案详解
- 酒店前厅部培训
- GB/T 5453-2025纺织品织物透气性的测定
- 花境培训课件
- 作业分析培训
- T∕HGJ 12402-2021 石油化工装置火灾紧急隔离控制阀设计标准
评论
0/150
提交评论