`
gaojingsong
  • 浏览: 1210556 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【JAVA 之RESTful结构】

阅读更多

一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。



 

REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple Object Access protocol,简单对象访问协议)以及XML-RPC更加简单明了,无论是对URL的处理还是对Payload的编码,REST都倾向于用更加简单轻量的方法设计和实现。值得注意的是REST并没有一个明确的标准,而更像是一种设计的风格

 

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

 

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

 

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

 

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

 

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

 

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

 

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

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

 

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

 

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

 

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

 

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

 

RESTful展示了自动化客户端,包括 Java 和各种语言编写的脚本,这些语言包括 Python、Perl、Ruby、PHP 或命令行工具,比如 curl。在浏览器中运行且作为 RESTful Web

服务消费者运行的 Ajax、Flash、JavaFX、GWT、博客和 wiki 都属于此列,因为它们都代表用户以自动化样式运行。自动化 Web 服务客户端在 Web 层向 Resource Request Handler 发送 HTTP 响应。客户端的无状态请求在头部包含方法信息,即 POST、GET、PUT 和 DELETE,这又将映射到 Resource Request Handler 中资源的相应操作。每个请求都包含所有必需的信息,包括 Resource Request Handler 用来处理请求的凭据。

 

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

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

 

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

 

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

 

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

 

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

 

什么是REST:结束语

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

  • 大小: 41.2 KB
0
0
分享到:
评论

相关推荐

    RESTFUL JAVA

    RESTful Java是现代Web服务开发的关键技术之一。通过遵循REST的原则并利用JAX-RS 2.0这样的标准API,开发者可以构建出高性能、易于维护的RESTful服务。无论是对于初学者还是有经验的开发者来说,《RESTful Java with...

    RESTFUL_JAVA_WEB_SERVICES_THIRD_EDITION.pdf

    3. **URI设计**:讨论了如何设计清晰、有意义的URI,以表达资源的层次结构和操作,这是创建用户友好的RESTful服务的关键。 4. **HTTP方法**:详细介绍了HTTP方法(GET、POST、PUT、DELETE等)的使用,以及何时适合...

    RESTful Java Web Services (2009).pdf

    ### RESTful Java Web Services知识点概览 #### 一、RESTful架构原理与概念 - **REST(Representational State Transfer)**:一种网络应用程序的设计风格和开发方式,基于约束条件和原则,利用HTTP协议来实现...

    构建 jersey+restful 所需JAR包

    而Jersey是Java语言中实现JAX-RS(Java API for RESTful Web Services)规范的开源项目,它提供了一整套工具和服务,帮助开发者轻松创建和部署RESTful服务。 在构建基于Jersey的RESTful应用时,正确配置和引入必要...

    REST-Project.zip_REST-Project_java RESTFul_java rest_project_res

    在本项目中,我们主要探讨RESTful API设计原则、Java的REST服务实现以及与之相关的项目结构。 【bpsweb】可能代表Web应用的前端部分,或者是一个与业务处理相关的模块。在RESTful架构中,前端通常负责用户界面交互...

    RESTful Server

    RESTful Server基于Java RESTful框架构建,这表明它利用了诸如Jersey、Spring Boot、Dropwizard等流行的Java REST库。这些框架提供了强大的功能,如自动资源发现、数据绑定、错误处理、测试工具等,使得开发者能够...

    spring mvc restful service

    5. **项目结构**:一个典型的Spring MVC Maven项目结构包括`src/main/java`(存放源代码)、`src/main/resources`(存放配置文件和静态资源)、`src/main/webapp/WEB-INF`(存放`web.xml`配置文件)等。 6. **配置...

    restful web service

    RESTful Web服务是一种基于HTTP协议的轻量级Web服务设计风格,它强调...提供的压缩包文件揭示了一个典型的Java Maven项目的结构,其中包含了源代码、构建配置以及第三方库,这些都是开发和部署RESTful服务所必需的。

    restful 接口开发规范(RESTfulAPIdesignguide)

    在开发RESTful接口时,我们需要遵循一定的设计规范来确保接口的一致性、可维护性和易用性。RESTful API(Representational State Transfer,也称为RESTful web服务)是一种提供互联网计算机系统间互操作性的方法。...

    springmvc 之 RestfulCRUD实例练习工程

    在这个"springmvc 之 RestfulCRUD实例练习工程"中,我们将会深入探讨如何利用Spring MVC实现RESTful风格的CRUD(创建、读取、更新、删除)操作。RESTful是一种软件架构风格,它基于HTTP协议,使得API接口更加简洁、...

    springMVC RESTFUL

    - `src/test/java` 存放单元测试或集成测试代码,用于验证 RESTful API 的正确性。 6. **Spring MVC 配置** - 在 Spring 配置文件(如 applicationContext.xml 或者 application-config.xml)中,配置 ...

    Java RESTful API标准,桑坦德开发周.zip

    在本资源包“Java RESTful API标准,桑坦德开发周”中,我们很可能会探讨以下几个关键知识点: 1. **RESTful原则**:REST的基本原则包括客户端-服务器架构、无状态、可缓存、统一接口等。这些原则使得API设计更加...

    教你如何用java开发树型结构

    在Java开发中,树型结构是一种常见的数据组织方式,它模拟了自然界中的树状结构,由节点(Node)和边(Edge)组成,每个节点可以有零个或多个子节点。这种结构在很多场景下都非常有用,比如文件系统、组织架构、...

    RESTful Java FOR Jax-RS

    RESTful架构的核心之一是“可寻址性”,意味着每个资源都应有一个唯一的标识符,通常是一个URL。这种地址不仅用于定位资源,也用于资源的交互,使得系统能够通过简单的HTTP方法(如GET、POST、PUT、DELETE)来操作...

    web-restful-demo

    2. `src/main/java`:源代码目录,其中可能有`com.example.webrestfuldemo`等包结构,包含CXF服务接口和实现类。 3. `src/main/resources`:存放配置文件,如CXF的wsdl或xml配置文件。 4. `src/main/webapp`:Web...

    SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验

    Mybatis是一个基于Java的持久层框架,提供了丰富的数据库操作功能。 6. Spring Boot:在本实验中,我们使用Spring Boot来实现项目的自动配置和依赖管理。Spring Boot是一个基于Spring框架的开源框架,提供了丰富的...

    springRestful小例子

    在IT行业中,Spring框架是Java企业级应用开发的首选框架,而RESTful风格的API设计则是现代Web服务的标准。本文将深入探讨Spring框架如何实现RESTful API,以及这些概念在"springRestful小例子"中的具体应用。 首先...

    基于java语言开发的基于Microsoft Graph Restful API的多全局管理系统.zip

    在本项目中,“基于Java语言开发的基于Microsoft Graph Restful API的多全局管理系统”是一个利用Java编程语言构建的系统,该系统与Microsoft Graph API进行交互,实现对Microsoft Office 365服务的各种操作,如访问...

Global site tag (gtag.js) - Google Analytics