现在的位置: 首页 > 综合 > 正文

什么是REST?

2013年01月28日 ⁄ 综合 ⁄ 共 4297字 ⁄ 字号 评论关闭

什么是REST

REST(REpresentation State Transfer)描述了一个架构样式的网络系统,比如
web
应用程序。它首次出现在2000Roy
Fielding
的博士论文中,他是 HTTP规范的主要编写者之一。REST指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful

Web应用程序最重要的REST原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。

在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用URI
(Universal Resource Identifier)
得到一个惟一的地址。所有资源都共享统一的界面,以便在客户端和服务器之间传输状态。使用的是标准的HTTP方法,比如GETPUTPOSTDELETEHypermedia是应用程序状态的引擎,资源表示通过超链接互联。

另一个重要的REST原则是分层系统,这表示组件无法了解它与之交互的中间层以外的组件。通过将系统知识限制在单个层,可以限制整个系统的复杂性,促进了底层的独立性。

REST架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量客户端的应用程序。它还降低了客户端和服务器之间的交互延迟。统一界面简化了整个系统架构,改进了子系统之间交互的可见性。REST简化了客户端和服务器的实现。

RESTful的实现:RESTfulWeb服务与RPC样式的Web服务

了解了什么是什么是REST,我们再看看RESTful的实现。最近,使用RPC样式架构构建的基于SOAPWeb服务成为实现SOA最常用的方法。RPC样式的Web服务客户端将一个装满数据的信封(包括方法和参数信息)通过HTTP发送到服务器。服务器打开信封并使用传入参数执行指定的方法。方法的结果打包到一个信封并作为响应发回客户端。客户端收到响应并打开信封。每个对象都有自己独特的方法以及仅公开一个URIRPC样式Web服务,URI表示单个端点。它忽略HTTP的大部分特性且仅支持POST方法。

由于轻量级以及通过HTTP直接传输数据的特性,Web服务的RESTful方法已经成为最常见的替代方法。可以使用各种语言(比如Java程序、PerlRubyPythonPHPJavascript[包括
Ajax]
)实现客户端。RESTfulWeb服务通常可以通过自动客户端或代表用户的应用程序访问。但是,这种服务的简便性让用户能够与之直接交互,使用它们的Web浏览器构建一个GET
URL
并读取返回的内容。

REST样式的Web服务中,每个资源都有一个地址。资源本身都是方法调用的目标,方法列表对所有资源都是一样的。这些方法都是标准方法,包括HTTP
GET
POSTPUTDELETE,还可能包括HEADEROPTIONS

RPC样式的架构中,关注点在于方法,而在REST样式的架构中,关注点在于资源——将使用标准方法检索并操作信息片段(使用表示的形式)。资源表示形式在表示形式中使用超链接互联。

LeonardRichardson
Sam Ruby
在他们的著作RESTful Web Services中引入了术语
REST-RPC
混合架构。REST-RPC混合Web服务不使用信封包装方法、参数和数据,而是直接通过HTTP传输数据,这与REST样式的Web服务是类似的。但是它不使用标准的HTTP方法操作资源。它在HTTP请求的URI部分存储方法信息。好几个知名的Web服务,比如YahooFlickr
API
del.icio.us API都使用这种混合架构。

RESTful的实现:RESTfulWeb服务的Java框架

有两个Java框架可以帮助构建RESTful
Web
服务。erome LouvelDave
Pawson
开发的 Restlet(见参考资料)是轻量级的。它实现针对各种RESTful系统的资源、表示、连接器和媒体类型之类的概念,包括Web服务。在Restlet框架中,客户端和服务器都是组件。组件通过连接器互相通信。该框架最重要的类是抽象类Uniform及其具体的子类Restlet,该类的子类是专用类,比如ApplicationFilterFinderRouterRoute。这些子类能够一起处理验证、过滤、安全、数据转换以及将传入请求路由到相应资源等操作。Resource类生成客户端的表示形式。

JSR-311Sun
Microsystems
的规范,可以为开发 RESTful Web服务定义一组Java
API
Jersey是对JSR-311的参考实现。

JSR-311提供一组注释,相关类和接口都可以用来将Java对象作为Web资源展示。该规范假定HTTP是底层网络协议。它使用注释提供URI和相应资源类之间的清晰映射,以及HTTP方法与Java对象方法之间的映射。API支持广泛的HTTP实体内容类型,包括HTMLXMLJSONGIFJPG等。它还将提供所需的插件功能,以允许使用标准方法通过应用程序添加其他类型。

RESTful的实现:构建RESTful
Web
服务的多层架构

RESTfulWeb服务和动态Web应用程序在许多方面都是类似的。有时它们提供相同或非常类似的数据和函数,尽管客户端的种类不同。例如,在线电子商务分类网站为用户提供一个浏览器界面,用于搜索、查看和订购产品。如果还提供Web服务供公司、零售商甚至个人能够自动订购产品,它将非常有用。与大部分动态Web应用程序一样,Web服务可以从多层架构的关注点分离中受益。业务逻辑和数据可以由自动客户端和GUI客户端共享。惟一的不同点在于客户端的本质和中间层的表示层。此外,从数据访问中分离业务逻辑可实现数据库独立性,并为各种类型的数据存储提供插件能力。

1展示了自动化客户端,包括Java和各种语言编写的脚本,这些语言包括PythonPerlRubyPHP或命令行工具,比如curl。在浏览器中运行且作为RESTful
Web
服务消费者运行的 AjaxFlashJavaFXGWT、博客和wiki都属于此列,因为它们都代表用户以自动化样式运行。自动化Web服务客户端在Web层向Resource
Request Handler
发送 HTTP响应。客户端的无状态请求在头部包含方法信息,即POSTGETPUTDELETE,这又将映射到Resource
Request Handler
中资源的相应操作。每个请求都包含所有必需的信息,包括Resource Request Handler用来处理请求的凭据。

Web服务客户端收到请求之后,ResourceRequest
Handler
从业务逻辑层请求服务。Resource Request Handler确定所有概念性的实体,系统将这些实体作为资源公开,并为每个资源分配一个惟一的URI。但是,概念性的实体在该层是不存在的。它们存在于业务逻辑层。可以使用Jersey或其他框架(比如Restlet)实现Resource
Request Handler
,它应该是轻量级的,将大量职责工作委托给业务层。

AjaxRESTful
Web
服务本质上是互为补充的。它们都可以利用大量 Web技术和标准,比如HTMLJavaScript、浏览器对象、XML/JSONHTTP。当然也不需要购买、安装或配置任何主要组件来支持Ajax前端和RESTful
Web
服务之间的交互。RESTful Web服务为Ajax提供了非常简单的API来处理服务器上资源之间的交互。

1中的Web浏览器客户端作为GUI的前端,使用表示层中的Browser
Request Handler
生成的 HTML提供显示功能。BrowserRequester
Handler
可以使用 MVC模型(JSFStrutsSpring都是Java的例子)。它从浏览器接受请求,从业务逻辑层请求服务,生成表示并对浏览器做出响应。表示供用户在浏览器中显示使用。表示不仅包含内容,还包含显示的属性,比如HTMLCSS

业务规则可以集中到业务逻辑层,该层充当表示层和数据访问层之间的数据交换的中间层。数据以域对象或值对象的形式提供给表示层。从业务逻辑层中解耦Browser
Request Handler
Resource Request Handler有助于促进代码重用,并能实现灵活和可扩展的架构。此外,由于将来可以使用新的RESTMVC框架,实现它们变得更加容易,无需重写业务逻辑层。

 

数据访问层提供与数据存储层的交互,可以使用DAO设计模式或者对象-关系映射解决方案(如HibernateOJB
iBATIS
)实现。作为替代方案,业务层和数据访问层中的组件可以实现为EJB组件,并取得EJB容器的支持,该容器可以为组件生命周期提供便利,管理持久性、事务和资源配置。但是,这需要一个遵从Java
EE
的应用服务器(比如JBoss),并且可能无法处理Tomcat。该层的作用在于针对不同的数据存储技术,从业务逻辑中分离数据访问代码。数据访问层还可以作为连接其他系统的集成点,可以成为其他Web服务的客户端。

数据存储层包括数据库系统、LDAP服务器、文件系统和企业信息系统(包括遗留系统、事务处理系统和企业资源规划系统)。使用该架构,您可以开始看到RESTful
Web
服务的力量,它可以灵活地成为任何企业数据存储的统一 API,从而向以用户为中心的Web应用程序公开垂直数据,并自动化批量报告脚本。

     

什么是REST:结束语

 

REST描述了一个架构样式的互联系统(如Web应用程序)。REST约束条件作为一个整体应用时,将生成一个简单、可扩展、有效、安全、可靠的架构。由于它简便、轻量级以及通过HTTP直接传输数据的特性,RESTfulWeb服务成为基于SOAP服务的一个最有前途的替代方案。用于web服务和动态Web
应用程序的多层架构可以实现可重用性、简单性、可扩展性和组件可响应性的清晰分离。AjaxRESTful
Web
服务本质上是互为补充的。开发人员可以轻松使用 AjaxRESTful
Web
服务一起创建丰富的界面。

via:IBM

抱歉!评论已关闭.