基于REST架构的Web2.0的研究

 摘 要:Web2.0是近几年发展起来的替代Web1.0的一种Web应用模式。REST架构的出现,满足了Web2.0发展的需求,同时Web2.0反过来 促进了REST在Web中的应用。本文分析了Web2.0应用模型和REST架构的特点,并对开发基于REST架构的Web2.0应用进行了研究,最后提 出了该应用中使用的主要技术模型。

  关键词:REST,Web2.0,Ajax,SOAP

  Abstract

  Web2.0 has been a kind of web application model instead of Web1.0 in recent years. The appearance of REST architecture is in need of the development of Web2.0. At the same time, Web2.0 promotes REST to use more in Web application contrarily. This paper analyzed Web2.0 application model and REST architecture traits respectively, and researched into how to develop the Web2.0 application based on REST architecture. In the end, the main technique model used in this application is drawn.

  Keywords: REST,Web2.0,Ajax,SOAP

  1. 引言

  1989年,英国科学家Tim Berners-Lee和比利时人Robert Cailliau在欧洲粒子物理研究所共同提议和构造了在因特网上使用超文本的方式来发布、共享和管理信息,此时宣告Web的诞生。Web是World Wide Web,即互联网的简称,是一个相互链接在一起、通过Web浏览器来访问的超文本文档系统。浏览器里看到的网页,可能包含文本、图像以及其它的多媒体,通 过文档之间的超链接,可以从一个网页浏览到其它网页。随着Web的不断发展,目前它拥有最大量的用户,变成了最大的分布式计算系统,基于最广为接受的开放 标准,不断推陈出新,成为一个动态生长着的开放系统。因此,可以说Web是一个正在生长着的、开放的、动态的分布式系统。

  起初的Web2.0大都是基于RPC模型的Web服务的方式。在一个相对封闭的环境中,RPC模型取得了较大成功。因为在封闭环境中,所有用户 都是已知的,可以共享一个数据模型。用户直接调用发布接口的API来获得服务,服务器端的开发者也通过接口获得了很大的灵活性。但是随着Web规模的不断 扩大,RPC的方式严重的偏离了Web发展的初衷。因为使用RPC的方法会导致调用者和服务之间的紧密耦合,同时RPC系统在Web规模下很容易产生接口 复杂性。

  Web2.0急需要满足它发展的Web架构。REST的出现从很大程度上解决了这个问题。REST定义了应该如何正确地使用Web标准,例如 HTTP和URI。如果你在设计应用程序时能坚持REST原则,那就预示着你将会得到一个使用了优质Web架构的系统。REST在本质上是一个可以被许多 不同技术实现的高层次的风格,而且可以被实例化。通过统一的URI来标识Web中的所有资源,并且使用HTTP通用的操作接口来操作这些资源,即将 HTTP协议作为了信息交互的主要契约,真正发挥HTTP协议的各种功能。因此,REST将繁琐的Web应用从RPC复杂的接口中解放出来,通过简洁和人 性化地方式开发应用,方便共享Web的各种资源,使Web应用更加贴近用户,更加简约。

  2. Web2.0

  Web 2.0,是O’Reilly公司在2003年首先使用的一个词,之后2004年又召开了Web 2.0大会,这个词迅速流行起来。它主要指基于Web 的下一代社区和托管服务,以博客、RSS、网摘、P2P、即时信息、社会网络、维基百科、大众分类等社会软件的应用为核心,依据六度分隔、XML、 Ajax等新理论和技术实现的互联网新一代模式,帮助Web用户协作和分享,以Google、MySpace、Facebook等网站为代表[1]。 Web2.0并不只是Web的升级换代,实际上是指软件开发人员和最终用户使用互联网平台的方式的变化,同时,在商业上,一直在探索如何才能在Web这个 平台上获得成功。

  2.1 Web2.0实质

  Web2.0实质上是社会、商业、技术在Web的平台上的重新融合和进一步发展。

  经过多年网络宽带的迅速发展,Web用户迅速增加,大量普通用户需要需要更好用、更个性化、更加以他们为中心、更多样的内容、服务和应用,这成 为了Web1.0向2.0迈进的最大动力。同时,长尾理论在Web上的成功商业应用大大的促进了Web的革新,这种长尾经济主要就是以如何让相互协作和分 享的用户口碑相传来病毒式地营销,如何利用这种用户社区的传播和推荐能力来开拓大规模的个性化服务为特点,从大规模单一市场转向选择性极大并丰富的多样化 长尾市场。技术上,开发者希望更加快捷和方便的开发满足用户的Web应用,因此能够获得更好的用户体验和更加轻量级的编程模式赢得了大量开发者的拥护。

  社会、商业和技术三种因素融合式地共同发展,相互推动,经过几年全球范围的尝试和实践,新的生活方式、商业模式和技术范型不断涌现,Web变得 更加开放、动态,社区也更加去中心化,人们却又能够更加紧密地协作和分享,内容、服务和应用更加的多样化和个性化,商业模式也逐渐走向如何满足大规模的小 众需求。

  2.2 编程准则

  首先,Web 2.0倡导的是简单性,即软件容易使用、易于组合、易于扩展。Web 2.0应用的最初吸引之处就是它的简单,避免并隐藏了那些多余的复杂性。从编程者的角度,Web2.0的应用一定要简约而不简单,能够清晰构思你的目标。 而从用户的角度,Web2.0应用能够使用户在一个时候只关心一个一个特性,完成一个目标。这对传统软件,是一次颠覆性的革新,把传统软件从开发者花大量 人力物力无开发和维护,并且要花大量的时间去训练用户使用软件转变到开发者的简单实现和用户的简单操作。

  其次,Web 2.0中链接是最基础的思想。这也是我们称之为Web的一个理由。链接是把Web中各种实体连接起来的最基本的元素。Web2.0中的链接需要遵循一些规则:

  1. Web上的任何东西都是可以被URI或者是URL所连接的。

  2. 把所有的链接都保存为他的原始出处,扩大共享的范围。

  3. 链接必须是持久的,它不会在没有任何缘由的情况下被改变或者是消失。

  4. 链接应该是可读的、稳定的、并且能够自我诠释的。

  然后,Web2.0奉行软件即服务的观念。只要用户付费即用,无需担心开发、安装、部署和运营维护,开发过程也极大程度地由用户驱动,用户需求及时反馈。还要符合长尾理论,通过口碑和网络效应来实现Web应用的推广。

  最后Web2.0的应用应该满足以下几个架构模型特征:

  1) 使用REST来表示和访问服务,每个网络资源可以用一个URI来唯一地表示和确定,并且使用HTTP的基本操作,包括GET、POST、PUT、DELETE等。

  2) 数据被编码成 XML文档或者JSON的方式来进行交换数据。

  3) 基于Ajax的丰富用户体验。

  3. REST架构

  REST是英文Representational State Transfer的缩写,中文翻译为“表述性状态转移”,他是由Roy Thomas Fielding 博士在他的论文《基于网络软件体系结构的构架风格与设计》中提出的一个术语。REST本身只是为分布式超媒体系统设计的一种架构风格,而不是标准。它是 Fielding博士对当前Web体系结构潜在设计原则的一种描述,也是对Web最成功要素的总结。REST 架构风格是全新的针对Web 应用的开发风格,是当今世界最成功的互联网超媒体分布式系统架构之一,它使得人们真正理解了HTTP协议本来面貌。

  3.1 REST风格准则

  基于Web的架构,实际上就是各种规范的集合,REST也不例外。REST正是在原来的各种Web规范基础上增加新的规范而形成的一种Web架构形式,并不是什么新的标准。REST架构风格具有三个主要准则:

  1) 网络上的所有事物都被抽象为资源,并且每个资源对应一个惟一的资源标识符URI(Unified Resource Identifier)。一个 Web 应用总是使用固定的 URI 向外部世界呈现。REST中的资源所指的不仅仅是数据,而是数据和表现形式的组合。比如一个电子商务公司可以用 “HTTP://www.dianzishangwu.com/book/123_html”来表示一本书《童话》的介绍,它的形式是HTML文本形式, 而“HTTP://www.dianzishangwu.com/book/123_text”也表示这本书的介绍,但是其形式是text的文本形式,所 以被归为不同的资源,这也是REST为什么要这样命名的原因。在REST系统中,Web上每一个资源都对应唯一的一个URI。不管资源是图片,文字还是视 频文件,甚至只是一种虚拟的Web服务,也不管你是xml格式、txt文件格式还是其它文件格式,全部通过URI对资源进行惟一的标识。

  2) 通过通用的连接器接口对资源进行操作。REST是基于HTTP协议的,任何对资源的操作行为都是通过HTTP协议来实现。HTTP不仅仅是一个简单的运载 数据的协议,而且还是一个具有丰富内涵的网络软件协议。他不仅仅能对互联网资源进行惟一定位,而且还能告诉我们如何对该资源进行操作。HTTP把对一个资 源的操作主要是GET、POST、PUT 和DELETE这四个方法,简称为CRUD 操作。由于资源和URI 是一一对应的,执行这些操作的时候URI是没有变化的,因此可以通过同一个URL地址对某个网络资源进行以上这些操作。

  3)真正意义的无状态客户-服务器模式。从客户到服务器的每个请求都必须包含理解该请求所必须的所有信息。无状态性使得客户端和服务器端不必保 存对方的详细信息,服务器只需要处理当前请求,而不必了解所有的请求历史。同时,无状态减少了服务器从局部错误中恢复的任务量,可以很容易的释放资源,因 为服务器端不必在多个请求中保存状态。原来的静态网络应用时,Web架构都是无状态的,但是随着融入式Web应用的兴起,Web 应用程序架构逐渐开始背离 REST 这个准则。主要是需要为个人用户提供更多个性化的内容和富应用程序模型。

  REST的目的是决定如何使一个良好定义的Web程序向前推进:一个程序可以通过选择一个带有链接的Web页面上的超链接,即状态变换,使得另一个Web页面(代表程序的下一个状态)返回到用户,使程序进一步运行。

  3.2 REST与SOAP

  Web服务是一个崭新的分布式计算模型。Web服务是一系列标准的综合,这些标准包括XML, SOAP, UDDI, WSDL和WSFL等。Web服务利用这些标准提供了一个松散耦合的分布式计算环境。在Web服务的模型中,厂商将其服务分成一个个相对独立的Web服 务,每个服务提供某类功能,客户可以通过绑定在HTTP之上的SOAP协议来访问这些服务。但不是说构建一个Web服务就必须使用SOAP和WSDL。

  SOAP(Simple Object Access Protocol,简单对象访问协议)技术有助于实现大量异构程序和平台之间的互操作性,从而使存在的应用能够被广泛的用户所访问。SOAP是Web服务 中的基础协议,它采用的交互模型是基于RPC机制的,编码模式是XML[2]。目前,大多数的Web服务都是采用SOAP协议作为客户端和服务器通信的主 要协议。以前,在一个相对封闭的环境中,RPC模型取得了较大成功。因为在封闭环境中,所有用户都是已知的,可以共享一个数据模型,用户直接调用发布接口 的API来获得服务,服务器端的开发者也通过接口获得了很大的灵活性。但是,随着环境扩大到整个因特网后,用户如果还是通过API来获得服务,那样接口数 量指数级地增长必然带来服务接口的繁琐性,大大阻碍了Web服务的提供。

  REST是一种Web架构形式,而SOAP是基于HTTP的具体协议,两者并不是完全对立的。说两者存在差异性,主要因为目前SOAP是RPC模式的, SOAP和REST形式在下面几个方面有明显的区别[3]:

表1:SOAP和REST的比较

  4.1Ajax客户端

  Ajax是Web2.0客户端的核心实现技术,因此基于REST的Web2.0应用的客户端也需要采用Ajax。Ajax表示 AsynchronousJavaScript加XML。它有时也称为XML的HTTP技术。在Ajax中,核心的技术主要是围绕实现与服务器的异步通 信,而无需页面刷新。XHR(XMLHTTPRequest)对象支持对服务器进行异步HTTP操作,包括GET、POST、PUT和DELETE。客户 端无需等待服务器的响应就可以进行下面的操作。Ajax应用是具有以下几个特征的Web应用[4]:

  1)使用级联样式表和HTML结合进行呈现。

  2)使用XML进行数据交互操作。

  3)使用XHR实现异步数据获取。

  可以说,Ajax是一种Web开发风格。Web浏览器仅在必要时才通过编程语言获取数据,并动态修改用户界面,可见“动态”和“仅在必要时”是 Ajax的本质所在。Ajax的这些特征使它成为富客户端的主要动力,使无状态服务器和有状态客户端成为可能。无状态的服务器正好迎合了REST的要求, 同时提供有状态的客户端也使应用程序资源和数据资源的绑定转换到了客户端,可以实现目前大多数Web的应用。可以说在Ajax没有出现之前,REST的很 多准则都无法实现。正是Ajax促使REST流行起来,逐渐使Web应用更加贴近其本来的面目。

  浏览器可以缓存Ajax的控制代码,即引擎,还可以缓存Ajax的数据。比如DojoToolkit就是一个很好的例子。Dojo提供了构建时 的工具来创建一个包含所有应用程序逻辑、表示和风格的压缩JavaScript文件dojo.js。由于它终究只是一个文件,因此Web浏览器可以对其进 行缓存,这意味着我们第二次访问启用Dojo的Web应用程序时,很可能就会从浏览器缓存中加载Ajax,而不是从服务器上加载它。由于Ajax引擎只是 一个文件,因此它也是可以使用代理缓存的。在大型的企业内部网中,只要有一名员工曾经下载过某个特定版本的应用程序的Ajax引擎,其他任何人都可以从内 部网网关上上获取一个缓存过的拷贝。这样Ajax引擎可以控制客户端的状态,是客户端成为有状态的客户端。同时,由于Ajax请求时,只是请求需要的业务 数据,而原来的绝大部分没有变化的数据不需要重新下载,因此可以缓存大部分数据,而只改变或获得很少一部分关键数据即可。

  另一方面,Ajax还可以很轻松的处理服务器故障,服务器崩溃或者重新启动对于用户来说都是完全透明的,因为服务器崩溃不会影响会话状态,这些 都保存在用户的浏览器中。可以说Ajax的出现,使REST的实现成为真正的可能,解决了REST客户端很多的效率问题,但是带来了一些安全方面的问题。

  4.2交互方式

  REST下的Web2.0应用客户端和服务器进行交互时,大部分数据采用JSON编码的格式。尽管Ajax这个缩写词暗示以XML作为数据表示 格式,但是XML并不是Web应用程序可用的惟一数据交换机制。JSON是JavaScriptObjectName与XML类似,JSON也是基于文本 的,是人机可读的。从机器可读性的角度来看,JSON似乎更容易解析和使用,特别是在浏览器应用程序中。因为它采用JavaScript对象和数组数据结 构的语法。在浏览器应用程序中使用JSON,就可以将整个数据结构作为第一类JavaScript对象对待。这样,对于Web开发者来说,完全避免了额外 的解析工作。JSON格式还可以在其他流行的编程语言中使用,比如Java语言、PHP、Ruby和C++等等。

  JSON由两种结构组成:名称/值对的集合和有序的值列表[5]。名称/值对中名称是字符串格式的,而值主要是指对象、记录、结构、散列表、关 联数组等大多数语言支持的数据格式。值序列在大多数语言中,表示为数组。这些都是通用的数据结构,几乎所有现代编程语言都支持它们。因此由这些结构组成的 数据格式可以在不同的编程语言之间方便地交换。另一个方面,JSON省去了XML中繁琐的重复标记的数据形式,大大缩小数据的大小,提高了客户端和服务器 的通信效率。比如一本书的表述分别如下:

  JSON形式:{“book”:{“number”: 1, “content”: “this is a book”}}

  XML形式:

 

  1

  this is a book

 

  明显JSON形式的数据更加简洁。

  4.3 REST服务

  基于REST的Web2.0在服务器端需要提供基于REST的Web服务(REST服务),即使用REST体系结构风格创建的Web服务。要创 建基于REST的Web服务,首先需要确定希望作为Web服务进行公开的所有资源。这些资源,需要使用唯一的URI来标识它们。例如,为了便于图书资源易 于检索和操作,图书的可以使用如下URI来标识:/book/{bookNumber},

  那么/book这个URI就表示所有图书的集合,即图书列表。

  然后需要确定操作这些资源的API,由于采用HTTP标准的操作方法,不需要另外定义API,只需要在HTTP包的头部标明HTTP的具体操 作,数据格式以及操作的URI就行。由上表可知,通过向服务器发送不同的URI 和HTTP包对服务器公开的资源进行响应的CRUD操作。如下表标明的REST API:

  最后就是在服务器端实现这些具体的Web服务。一般采用Web服务的标准模型,下图所示为Web 服务模型中涉及的重要角色和交互:

Web服务模型

  服务提供者是服务的所有者或者平台,它提供了服务的运行平台和具体的服务实现。服务消费者是寻找并调用服务或者发起与服务的交互的应用程序。服 务消费者可以是由人控制的浏览器应用程序,也可以是没有用户界面的程序。服务注册处是一个可搜索的服务描述目录,服务提供者将他们的服务描述注册到这里。 服务消费者通过注册处寻找服务并获得服务的相关信息。注册让服务提供者能够注册服务描述,从而让服务消费者可以找到服务。发现可以让服务消费者能够直接获 得服务描述。绑定让服务消费者能够使用服务描述中指定的绑定细节,在运行时调用服务的实现或者发起与服务的交互。因此,通过这个Web服务模型可以根据 REST的API提供不同的满足用户需求的服务。

  5 结论

  本文主要分析了Web2.0的模型特点和REST架构的主要特色,并进一步论述了在REST架构下,开发Web2.0应用主要的技术模型。在 Web2.0的需要下,REST的及时出现,为Web2.0的发展奠定了架构基础,Web2.0同时促进了REST架构的改进,两者互相影响,互相依赖, 必将指引着Web应用向着更加快捷简单的方向发展,必将为人们提供更加贴近大众,更能满足用户需求的Web服务。

  参考文献

  [1] Tim O'Reilly. What Is Web 2.0.http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.

  html?page=1, 2005.

  [2] 英格兰德 著,黄刚 译. Java与SOAP. 中国电力出版社, 2002年12月.

  [3] Paul Prescod. Roots of the REST/SOAP Debate. http://www.prescod.net/rest/rest_vs_soap_overview/, 2003.

  [4] Christian Gross. Ajax and REST Recipes. Apress, 2006.

  [5] JSON.org. 介绍JSON. http://www.json.org/json-zh.html, 2005.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值