web restful_用于构建RESTful Web服务的多层体系结构

web restful

至关重要的是,现代Web应用程序必须使用异步JavaScript和XML(Ajax)或Google Web Toolkit(GWT)以及RESTful Web服务为外部客户端应用程序提供类似于桌面的丰富浏览器界面。 本文提出了用于Ajax / GWT和来自外部客户端应用程序的调用的资源请求处理程序(RRH),以及用于处理来自浏览器的请求并生成输出以显示在浏览器中的浏览器请求处理程序(BRH)。 这两个处理程序共享一个公共的业务逻辑层,后者又与数据访问层进行交互。 提取RRH和BRH可简化设计并有助于促进代码重用,从而实现灵活且可扩展的体系结构。

什么是REST?

REST(表示状态传输)描述了网络系统(如Web应用程序)的体系结构样式。 它是由HTTP规范的主要作者之一Roy Fielding于2000年在其博士学位论文中首次引入的。 REST是指体系结构约束和原则的集合。 如果应用程序或设计符合那些约束和原则,则它是RESTful的。

Web应用程序最重要的REST原则之一是,客户端和服务器之间的交互在请求之间是无状态的。 从客户端到服务器的每个请求必须包含理解该请求所需的所有信息。 客户端不会在请求之间的任何时刻注意到服务器是否要重启。 此外,无状态请求可以由任何可用的服务器自由响应,这适用于诸如云计算之类的环境。 客户端可以缓存数据以提高性能。

在服务器端,应用程序状态和功能分为资源。 资源是关注的项目,是向客户公开的概念标识。 示例资源包括应用程序对象,数据库记录,算法等。 每个资源都可以使用URI(通用资源标识符)进行唯一寻址。 所有资源共享一个统一的接口,用于客户端和服务器之间的状态转移。 使用标准的HTTP方法,例如GETPUTPOSTDELETE 。 超媒体是应用程序状态的引擎,资源表示通过超链接互连。

REST的另一个重要原则是分层系统 ,这意味着组件无法看到与之交互的直接层。 通过将系统知识限制为单层,可以在整个系统复杂性上设置边界,从而提高基板的独立性。

REST体系结构约束在整体上应用时会生成可很好地扩展到大量客户端的应用程序。 它还减少了客户端和服务器之间的交互延迟。 统一的界面简化了整个系统的体系结构,并提高了子系统之间交互作用的可见性。 REST简化了客户端和服务器的实施。

RESTful Web服务与RPC样式的Web服务

直到最近,使用RPC样式的体系结构构建的基于SOAP的Web服务一直是实现面向服务的体系结构(SOA)的最流行方法。 RPC样式的Web服务客户端通过HTTP将充满数据的信封(包括方法和参数信息)发送到服务器。 服务器展开信封,并使用传递的参数执行命名方法。 该方法的结果包装在信封中,并作为响应发送回客户端。 客户端收到响应并展开信封。 每个对象都有其独特的方法,并且RPC样式的Web服务仅公开一个URI,该URI表示单个端点。 它忽略了HTTP的大多数功能,仅支持POST方法。

RESTful的Web服务方法由于其轻量级的特性以及直接通过HTTP传输数据的能力而成为一种流行的替代方法。 客户端使用多种语言实现,例如Java程序,Perl,Ruby,Python,PHP和Javascript(包括Ajax)。 RESTful Web服务通常由自动客户端或代表用户运行的应用程序访问。 但是,它们的简单性使人们可以直接与他们进行交互,使用其Web浏览器构造GET URL并读取返回的内容。

在REST样式的Web服务中,每个资源都有一个地址。 资源本身是方法调用的目标,并且所有资源的方法列表都是相同的。 这些方法是标准的,包括HTTP GET, POST, PUT, DELETE,以及可能的HEADEROPTIONS

在RPC样式的体系结构中,重点是方法,而在REST样式的体系结构中,重点是资源,这些信息将作为表示形式检索并使用标准方法进行操作。 资源表示通过表示中的超链接互连。

Leonard Richardson和Sam Ruby在他们的书RESTful Web Services中引入了术语REST-RPC混合体系结构。 REST-RPC混合Web服务没有使用信封来包装方法,参数和数据,而是直接通过HTTP传输数据,这类似于REST样式。 但是它不使用标准的HTTP方法对资源进行操作。 它将方法信息存储在HTTP请求的URI部分中。 几种著名的Web服务(例如Yahoo的Flickr API和del.icio.us API)都使用这种混合体系结构。

RESTful Web服务的Java框架

已经出现了两个Java框架来帮助构建RESTful Web服务。 Jerome Louvel和Dave Pawson的Restlet(请参阅参考资料 )是轻量级的。 它为任何种类的RESTful系统(包括Web服务)实现资源,表示,连接器和媒体类型等概念。 在Restlet框架中,客户端和服务器都是组件。 组件通过连接器相互通信。 该框架中最重要的类是抽象类Uniform及其具体子类Restlet ,其子类是专用类,例如ApplicationFilterFinderRouterRoute 。 这些子类共同处理身份验证,过滤,安全性,数据转换,并将传入的请求路由到相应的资源。 Resource类为客户端生成演示文稿。

JSR-311(请参阅参考资料 )是Sun Microsystems的规范,它定义了一组Java API,用于开发RESTful Web服务。 Jersey(请参阅参考资料 )是JSR-311的参考实现。

JSR-311提供了一组带有相关类和接口的注释,可用于将Java对象公开为Web资源。 该规范假定HT​​TP是基础网络协议。 通过使用注释,它提供了URI与相应资源类之间的清晰映射,以及HTTP方法与Java对象中的方法之间的映射。 该API支持多种HTTP实体内容类型,包括HTML,XML,JSON,GIF,JPG等。 它还将提供所需的插件功能,以允许应用程序以标准方式添加其他类型。

用于构建RESTful Web服务的多层体系结构

RESTful Web服务和动态Web应用程序在许多方面都相似。 有时,它们为不同类型的客户端提供相同或非常相似的数据和功能。 例如,在线电子商务目录网站提供了浏览器界面,供用户搜索,查看和订购产品。 如果它还提供Web服务,以便公司,零售商甚至个人可以自动订购产品,将很有帮助。 Web服务可以像大多数动态Web应用程序一样,从多层体系结构中固有的关注点分离中受益。 业务逻辑和数据可以由自动客户端和GUI客户端共享。 唯一的区别是客户的性质和中间层的表示层。 此外,将业务逻辑与数据访问分开可以实现数据库独立性,并为各种类型的数据存储提供可插入性。

图1显示了自动客户端,其中包括Java和各种语言的脚本(例如Python,Perl,Ruby,PHP)或命令行工具(例如curl)。 在浏览器中运行并充当RESTful Web服务使用者的Ajax,Flash,JavaFX,GWT,博客和Wiki也属于该组,因为它们以自动化的方式代表用户。 自动化的Web服务客户端将HTTP请求发送到Web层中的资源请求处理程序。 来自客户端的无状态请求在标头中包含方法信息,即POSTGETPUTDELETE ,这些信息将映射到资源请求处理程序中资源的相应操作。 每个请求都包含所有必要的信息,包括资源请求处理程序处理该请求的凭据。

图1.多层Web应用程序环境图
带有客户端层的多层应用程序环境图,其中显示了并行运行的浏览器客户端和Web Service客户端,一个应用程序层,显示了MVC请求处理程序如何与Jersey或Restlet服务处理程序并行运行,两者都传递给各种其他脚本功能以及从应用层提供的数据存储层。还显示了与浏览器客户端交互的自动服务功能。

在从Web服务客户端收到请求之后,资源请求处理程序从业务逻辑层请求服务。 资源请求处理程序将系统公开的所有概念实体标识为资源,并为每个概念实体分配唯一的URI。 但是,概念身份在此层中不存在。 相反,它们存在于业务逻辑层中。 资源请求处理程序可以使用Jersey或其他框架(如Restlet)来实现,并且应该是轻量级的,主要是将繁重的工作委托给业务层。

Ajax和RESTful Web服务自然可以相互配合。 它们都利用了广泛可用的Web技术和标准,例如HTML,JavaScript,浏览器对象,XML / JSON和HTTP。 绝对没有必要购买,安装或配置任何其他主要组件来实现Ajax前端和RESTful Web服务之间的有效交互。 RESTful Web服务为Ajax提供了一个非常简单的API,以处理与服务器上资源的交互。

图1中的Web浏览器客户端充当GUI前端,使用表示层中的Browser Request Handler生成HTML提供显示功能。 可以使用MVC模型(JSF,Struts或Spring是Java的示例)来实现浏览器请求处理程序。 它接受来自浏览器的请求,从业务逻辑层请求服务,生成演示文稿,并响应浏览器。 该演示旨在通过浏览器显示给用户。 该演示文稿不仅包含内容,还包含显示的属性,例如HTML和CSS。

业务规则集中在业务逻辑层中,该业务逻辑层充当表示层和数据访问层之间的数据交换的中介。 数据以域对象或值对象的形式提供给表示层。 将浏览器请求处理程序和资源请求处理程序与业务逻辑层分离,有助于促进代码重用,并导致灵活且可扩展的体系结构。 另外,随着新的REST和MVC框架在将来可用,在不重写业务逻辑层的情况下更容易实现它们。

数据访问层提供与数据存储层的接口,并且可以使用DAO设计模式或对象关系映射解决方案(例如Hibernate,OJB或iBATIS)来实现。 作为替代方案,可以在EJB容器的支持下将业务层和数据访问层中的组件实现为EJB组件,该容器有助于组件的生命周期并管理持久性,事务和资源分配。 但是,这确实需要兼容Java EE的应用程序服务器,例如JBoss,并且不能与Tomcat一起使用。 该层的功能在于将数据访问代码与用于不同数据存储技术的业务逻辑分开。 数据访问层还可以充当集成点,以与其他系统链接,包括成为其他Web服务的客户端。

数据存储层包括数据库系统,LDAP服务器,文件系统和企业信息系统,包括遗留系统,事务处理系统和企业资源计划系统。 使用此体系结构,您可以开始看到RESTful Web服务的功能,该服务具有灵活性,可以作为任何企业数据存储的统一API,从而将炉灶式数据公开给以用户为中心的Web应用程序和自动批处理报告脚本。

结论

REST描述了网络系统(如Web应用程序)的体系结构样式。 REST约束作为一个整体应用时,会生成一个简单,可伸缩,高效,安全,可靠和可扩展的体系结构。 RESTful Web服务已经成为基于SOAP的服务的有希望的替代方法,这是因为它们的简单性,轻量级的特性以及直接通过HTTP传输数据的能力。 Web服务和动态Web应用程序的多层体系结构导致可重用性,简单性,可扩展性以及组件职责的明确分离。 Ajax和RESTful Web服务自然很适合。 通过将Ajax和RESTful Web服务一起使用,开发人员可以轻松创建丰富的界面。

本文是作者编写教程的前身,以演示如何使用本文中讨论的多层体系结构构建RESTful Web服务和动态Web应用程序。 它提供了一个示例,说明REST Web服务,Ajax和Spring Web Flow如何协同工作以产生类似于桌面的富Web界面。 本教程使用Jersey,Spring,MySQL和Tomcat。 它是在Eclipse中配置和实现的。

根据美国国家自然科学基金会与大学大气研究公司的合作协议,这项研究的实现是由国家科学基金会提供了部分支持。 国家大气研究中心由国家科学基金会赞助。 另外,我还要感谢NCAR的Markus Stobbs,他为本文提供了建议和编辑。


翻译自: https://www.ibm.com/developerworks/web/library/wa-aj-multitier/index.html

web restful

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值