Java RESTful Web Service实战(第2版) 1.3 解读JAX-RS标准

1.3 解读JAX-RS标准

JAX-RS是Java领域的REST式的Web服务的标准规范,是使用Java完成REST服务的基本约定。

1.3.1 JAX-RS2标准

Java领域中的Web Service是指实现SOAP协议的JAX-WS。直到Java EE 6(发布于2008年9月)通过JCP(Java
Community Process)组织定义的JSR311(http://www.jcp.org/en/jsr/detail?id=311),才将REST在Java领域标准化。

JSR311名为The Java API for
RESTful Web Service,即JAX-RS,其参考实现是Glassfish项目中的Jersey1.0。此后,JSR311进行了一次升级(2009年9月),即JAX-RS1.1。JAX-RS诞生后,时隔5年(2013年5月)发布的Java EE7包含了JSR339,将JAX-RS升级到JAX-RS2(http://www.jcp.org/en/jsr/detail?id=339)。JAX-RS2.0在前面版本的基础上增加了很多实用性的功能,比如对REST客户端API的定义,异步REST等,对REST的支持更加完善和强大。

JAX-RS的版本对应的参考实现Jersey项目版本信息参见表1-1。

表1-1 JAX-RS标准和Jersey版本信息

JSR标准  JSR名称  标准发布时间         JSR实现

jsr311       JAX-RS
1.0        2008年9月8日    Jersey1.x

jsr311       JAX-RS
1.1        2009年9月17日  Jersey1.x

jsr339       JAX-RS
2.0        2013年5月22日  Jersey2.x

 

1.3.2 JAX-RS2的目标

JAX-RS2标准(即JSR339)中定义了目标、非目标和元素等内容。JSR339标准中的这部分内容通常被以实现业务功能为目的的开发人员所忽视,在此和读者分享的一个开发经验是:要掌握一项技术,先要掌握它背后标准的定义。首先我们来看看JAX-RS2的目标。

1)基于POJO:JAX-RS2的API提供一组注解(annotation)和相关的接口、类,并定义了POJO(Plain Ordinary Java Object)对象的生命周期和作用域。规定使用POJO来公布Web资源。

2)以HTTP为中心:JAX-RS2采用HTTP协议,并提供清晰的HTTP和统一资源定位(URI)元素来映射相关的API类和注解。JAX-RS2的API不但支持通用的HTTP使用模式,还对WebDAV和Atom等扩展协议提供灵活的支持。

3)格式独立性:JAX-RS2对传输数据(HTTP
Entity)的类型/格式的支持非常宽泛,允许在标准风格之上使用额外的数据类型。

4)容器独立性:JAX-RS2的应用可以部署在各种Servlet容器中,比如Tomcat/Jetty,也可以部署在支持JAX-WS的容器中,比如GlassFish。

5)内置于Java EE:JAX-RS2是Java EE规范的一部分,它定义了在一个Java EE容器内的Web资源类的内部,如何使用Java EE的功能和组件。

阅读指南

WebDAV(Web-based
Distributed Authoring and Versioning,基于Web的分布式创作和版本控制)是IETF组织的RFC2518协议。WebDAV基于并扩展了HTTP
1.1,在HTTP标准方法以外添加了以下内容。

Mkcol:创建集合。

PropFind/PropPatch:针对资源和集合检索和设置属性。

Copy/Move:管理命名空间上下文中的集合和资源。

Lock/Unlock:改写保护,支持文件的版本控制。

针对在REST风格的Web服务中是否应该使用WebDAV,业内的声音并不一致,持反对意见的主要观点是WebDAV带来了非统一的接口,这违背了REST的初衷。本书的示例将不采用WebDAV,但文字部分将讲述如何支持WebDAV。Atom类型传输格式将在2.3节讲述。

1.3.3 非JAX-RS2的目标

那么哪些不是JAX-RS2的目标呢?

1)对J2SE 6.0之前版本的支持:JAX-RS2中大量使用了注解(annotation),需要J2SE 6.0以及更新的版本,因此不提供对J2SE 6.0以下版本的支持。

2)对服务的描述、注册和探测:JAX-RS2没有定义也无须支持任何服务的描述(description)、服务的注册(registration)和服务的探测(discovery)。

3)HTTP协议栈:JAX-RS2没有定义新的HTTP协议栈。承载JAX-RS2应用的容器提供对HTTP协议的支持。

4)数据类型/格式类:JAX-RS2没有定义处理实体内容的类,它将这一类型的类交由使用JAX-RS2的应用中的类去实现。

1.3.4 解读JAX-RS元素

最后,我们来看看JAX-RS2中定义了哪些元素。

1)资源类:使用JAX-RS注解来实现相关Web资源的Java类。如果用MVC的三层结构来解读,那么资源类位于最前端,用于接收请求和返回响应。通常,但不是约定,我们使用resource作为包名,三层的包定义形如:resource-service-dao。

2)根资源类:使用@Path注解,提供资源类树的根资源及其子资源的访问。资源类分为根资源类和子资源类,由于Jersey默认提供WADL(参见1.6节),每个应用公布的全部资源接口可以通过WADL页面查阅。

3)请求方法标识符:使用运行期注解@HttpMethod,用来标识处理资源的HTTP请求方法。该方法将使用资源类的相应方法处理,标准的方法包括DELETE、GET、HEAD、OPTIONS、POST、PUT,详见2.1节。

4)资源方法:资源类中定义的方法使用了请求方法标识符,用来处理相关资源的请求。就是上面提到的资源类的相应方法。

5)子资源标识符:资源类中定义的方法,用来定位相关资源的子资源。

6)子资源方法:资源类中定义的方法,用来处理相关资源的子资源的请求。

7)Provider:一种JAX-RS扩展接口的实现类,扩展了JAX-RS运行期的能力。第4章详述了各种Provider及其实现。

8)Filter:一种用于过滤请求和响应的Provider,详见3.3节。

9)Entity Interceptor:一种用于处理拦截消息读写的Provider,详见3.5节。

10)Invocation:一种用于配置发布HTTP请求的客户端API对象,详见5.1.3节。

11)WebTarget:一种使用URI标识的Invocation容器对象,详见5.1.2节。

12)Link:一种携带元数据的URI,包括媒体类型、关系和标题等,详见2.4节。

时间: 2024-12-27 14:01:14

Java RESTful Web Service实战(第2版) 1.3 解读JAX-RS标准的相关文章

Java RESTful Web Service实战(第2版)

Java核心技术系列 Java RESTful Web Service实战 (第2版) 韩陆 著 图书在版编目(CIP)数据 Java RESTful Web Service实战 / 韩陆著. -2版. -北京:机械工业出版社,2016.7 (Java核心技术系列) ISBN 978-7-111-54213-1 Ⅰ. J-   Ⅱ. 韩-   Ⅲ. JAVA语言-程序设计   Ⅳ. TP312 中国版本图书馆CIP数据核字(2016)第156331号 Java RESTful Web Servi

Java RESTful Web Service实战(第2版) 导读

Java核心技术系列 Java RESTful Web Service实战 (第2版) 韩陆 著   半年前初识韩陆的时候,我们就聊到他正在写的这本书,当得知我从2006年就参与了Apache CXF开发,他立即邀请我为他的新书写序,我也就欣然答应了. Apache CXF作为JAXWS以及JAX-RS规范的实现框架,已经成为很多Web服务开发者必选的开发框架.作为这一框架的开发维护者之一,我的日常工作经常需要熟悉这些JSR规范,并实现JSR所定义的API,解决最终用户的使用问题. 熟悉Java

Java RESTful Web Service实战(第2版) 2.3 传输格式

2.3 传输格式 本节要考虑的就是如何设计表述,即传输过程中数据采用什么样的数据格式.通常,REST接口会以XML和JSON作为主要的传输格式,这两种格式数据的处理是本节的重点.那么Jersey是否还支持其他的数据格式呢?答案是肯定的,让我们逐一掌握各种类型的实现. 2.3.1 基本类型 Java的基本类型又叫原生类型,包括4种整型(byte.short.int.long).2种浮点类型(float.double).Unicode编码的字符(char)和布尔类型(boolean). 阅读指南 本

Java RESTful Web Service实战(第2版) 1.2 解读REST服务

1.2 解读REST服务 RESTful对应的中文是REST式的,RESTful Web Service的准确翻译应该是REST式的Web服务,我们通常简称为REST服务.RESTful的应用或者Web服务是最常见的两种REST式的项目部署.存在的方式.本节将介绍REST服务并对比其与传统Web Services的不同. 1.2.1 REST式的Web服务 RESTful Web Service是一种遵守REST式风格的Web服务.REST服务是一种ROA(Resource-Oriented A

Java RESTful Web Service实战(第2版) 1.4 Jersey项目概要

1.4 Jersey项目概要 Jersey是JAX-RS标准的参考实现,是Java领域中最纯正的REST服务开发框架.本节将带读者走近Jersey的世界. Jersey项目是GlashFish项目的一个子项目,专门用来实现JAX-RS(JSR 311 & JSR 339)标准,并提供了扩展特性. 1.4.1 获得Jersey Jersey项目的地址是https://jersey.java.net.该网站同时提供了JAX-RS和JAX-RS2两个并行版本,分别是JAX-RS1.1(截至本书发稿,最

Java RESTful Web Service实战(第2版) 1.5 快速实现Java REST服务

1.5 快速实现Java REST服务 本节包含两个Jersey实战示例,目的是让读者具备快速创建REST服务的能力. 在开始实战之前,首先需要读者确认你的环境是否已经安装了Java和Maven.这里使用Maven命令,示例如下. mvn -v   Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:37+08:00) Maven home: /usr/local/Cellar/maven/

Java RESTful Web Service实战(第2版) 1.7 Java领域的其他REST实现

1.7 Java领域的其他REST实现 Java领域存在很多REST实现,我们以是否遵循JAX-RS标准,将它们分为两组.前者是JAX-RS标准参考实现之外的厂商实现,后者要么是因为出现较JAX-RS标准早,要么干脆跳出了JAX-RS标准的定义,以自身框架一致性为目标,实现了一套独有的对REST开发的支持.本节将概括性地介绍这些实现工具,以便读者有所对比和选择. 1.7.1 JAX-RS的其他实现 JAX-RS标准发布后,诸多厂商推出了自己的基于JAX-RS标准的实现.其中最有影响力的当属来自J

Java RESTful Web Service实战(第2版) 1.9 本章小结

1.9 本章小结 本章主要讲述了REST服务的概念和实战.先后解读了REST.REST服务.JAX-RS2标准中的重要概念,对JAX-RS2的参考实现项目Jersey进行了简单而全面的概述.随后讲述了如何快速创建REST应用和REST服务,介绍了基于JAX-RS2标准的其他项目和其他非JAX-RS2标准的.著名的Java项目. 通过阅读本章,读者可以清楚地掌握Java领域开发REST服务中的基本概念. 本章主要的知识点如下. REST是什么 一种架构风格. HTTP+URI+XML是REST的基

Java RESTful Web Service实战(第2版) 1.6 快速了解Java REST服务

1.6 快速了解Java REST服务 1.6.1 REST工程类型 在REST服务中,资源类是接收REST请求并完成响应的核心类,而资源类是由REST服务的"提供者"来调度的.这一概念类似其他框架中自定义的Servlet类,该类会将请求分派给指定的Controller/Action类来处理.本节将讲述REST中的这个提供者,即JAX-RS2中定义的Application以及Servlet. Application类在JAX-RS2(JSR339,详见参考资料)标准中定义为javax.