首页>参考读物>计算机科学与技术>软件与程序设计

Java RESTful Web Service实战
作者 : 韩陆 著
出版日期 : 2014-09-25
ISBN : 978-7-111-47888-1
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 314
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

国内首本完整地、深度地讲解如何基于Java标准规范实现REST风格的Web服务的专著,阿里巴巴资深Java技术专家近10年开发经验结晶,3位业内著名技术专家联袂推荐!不仅深刻解读了最新的JAX-RS标准和其API设计,以及Jersey的使用要点和实现原理,而且还系统讲解了REST的基本理论,更重要的是从实践角度深度讲解了如何基于Jersey实现完整的、安全的、高性能的REST式的Web服务。
全书共11章,分为三篇。第一篇(1~5章)系统讲解了REST的基本理论和Jersey的基本实践,旨在帮助读者具备使用Java开发REST式的Web服务的基本能力。第二篇(6~10章)深入讲解了写好REST程序的必要知识点,旨在帮助读者全面了解如何写好一个完整的、安全的、高性能的REST式的Web服务。第三篇(第11章)分享了笔者5年外企工作生涯中对自动化测试和敏捷的体会,希望可以帮助读者更宏观地审视REST的应用场景,给读者启发。
本书包含对部分源代码的解读,也包含大量示例和实现代码,还包含大型的、完整的项目示例。除此之外,本书还包括“阅读指南”、“小白讲堂”、“宅人坑事”等知识模块,旨在帮助读者能在愉悦中更好地阅读本书。

图书特色

封面:
首本讲解基于Java标准规范实现REST的专著,阿里巴巴Java技术专家12年开发经验结晶,3位业内著名技术专家联袂推荐!
深刻解读JAX-RS标准和API设计,Jersey的使用要点和实现原理,以及基于REST的Web服务的设计思想、原则和特点。

前勒口:
内容简介
国内首本完整、深度地讲解如何基于Java标准规范实现REST风格的Web服务的专著,阿里巴巴Java技术专家12年开发经验结晶,3位业内著名技术专家联袂推荐!不仅深刻解读了最新的JAX-RS标准和其API设计,以及Jersey的使用要点和实现原理,而且系统讲解了REST的基本理论,更重要的是从实践角度深度讲解了如何基于Jersey实现完整的、安全的、高性能的REST式的Web服务。
全书共11章,分为三篇。第一篇(第1~5章)系统讲解了REST的基本理论和Jersey的基本实践,旨在帮助读者具备使用Java开发REST式的Web服务的基本能力。第二篇(第6~10章)深入讲解了写好REST程序的必要知识点,旨在帮助读者全面了解如何写好一个完整的、安全的、高性能的REST式的Web服务。第三篇(第11章)分享了笔者5年外企工作生涯中对自动化测试和敏捷的体会,希望可以帮助读者更宏观地审视REST的应用场景,给读者启发。
本书包含对部分源代码的解读,也包含大量示例和实现代码,还包含大型的、完整的项目示例。除此之外,本书还包括“阅读指南”、“小白讲堂”、“宅人坑事”等知识模块,旨在帮助读者能在愉悦中更好地阅读本书。

封底:
传统的Web服务是基于RPC风格的,其实现技术主要包含SOAP、WS标准栈等。RPC风格的Web服务用在分布式的、开放的环境中会带来一些问题,如技术架构复杂、可伸缩性差等,REST风格的Web服务足以解决上述问题。本书收纳了作者近3年的RESTful实践经验,将REST理论与Java实现相结合,循序渐进地将使用Java开发REST式的Web服务中总结的知识点和经验呈现给读者。各个章节中的知识点都精心设计了相应的示例代码,便于读者更好地理解和更及时地实践。
笔者从敏捷角度为读者呈现了一个完整和相对复杂的REST式的Web服务实例,相信这个实例能让读者更好地融会贯通,同时,可以对敏捷开发和自动化测试有新的认识。

多年前我在开发 Sonatype Nexus 的时候首次接触并熟悉了 REST 风格的 Web 服务,这种风格使得我们的设计简单、规范且易测,Nexus 的大部分功能都可以通过一行简单的 cURL 命令来验证,单凭这一点就足以让我喜爱上 REST 风格。现如今,开发 REST 风格的 Web 服务可简单多啦,尤其是如果你遵循 JAX-RS 2.0 标准并借助 Jersey 优秀的实现,编写 REST 风格 Web 服务的难度就大大降低了。这本书全面生动地阐述了 JAX-RS 2.0 标准,不仅覆盖了 API、请求处理、安全等核心内容,更有异步通信、调优等高级主题,无疑是学习 Java REST 风格的 Web 服务的绝佳参考。韩陆技术功底扎实,在写作过程中潜心阅读了大量的 Jersey 源码,这也让这本书的质量得到了进一步保障,相信本书定会助你在 REST 的道路上更快、更稳地前行。
——许晓斌, 《Maven实战》作者

后勒口:
作者简介
韩 陆?毕业于北京航空航天大学,资深Java技术专家,从业12年,曾在用友(总部)、新浪、Avaya和Technicolor等知名企业从事研发工作,现就职于阿里巴巴(总部),从事敏捷和自动化测试的研发工作,实践经验非常丰富。常活跃于InfoQ、CSDN等技术传播平台,曾经在多种大小技术会议和沙龙上分享自己的经验。《JSF和Richfaces使用指南》作者,《Java EE 7 Essentials》译者。

图书前言

从我启动本书到完稿,历时一年有余。
  此间,Java EE 7 得到了更多服务器软件的支持,Jersey 升级了9 个小版本——我在动笔开始文字和示例代码编写的时候,Jersey 刚刚推出2.0 版本,到本书完毕时,版本号是2.9,这也是本书的最终版本。此后新版本带来的改变只有通过本书提供的源代码来同步更新。
  此间,我积极参与和关注着Jersey 项目的动向,通过关注Jersey 官方文档、Jersey 在GitHub 托管系统的源代码、Jersey 的Jira 缺陷管理系统、Jersey 的StackOver.ow 问答系统,对其修复缺陷、引入新功能和如何使用Jersey 等事宜不断跟进。
  我之所以这么做,目的只有一个,即希望为读者呈现的是一本Java 领域REST 开发的好书。
为什么要写这本书
  REST 式的Web 服务有多流行,相信每一位翻阅本书的读者都很清楚,冒昧地猜测,你可能想要看到的是一本讲述如何使用Java 语言和Java EE 平台,来实现这一风格的服务或者应用的书。这也正是我这两年来努力写作的初心和原动力。我相信,读者希望看到的内容不单单是追逐流行、风靡一时的“快餐”。作为开发者,我知道拥有对新技术、新标准的敏锐嗅觉非常重要,但我认为更难能可贵的是把一个业内认可的标准学好和用好。Java EE 7 中包含了JAX-RS 2.0 标准,是Java 领域REST 式的Web 服务的规范;GlassFish 是Java EE 7 的参考实现项目集,Jersey 是其子项目,是JAX-RS 2.0 的参考实现。本书的目的就是要把JAX-RS 2.0 说清楚,把如何用Jersey 写好REST 式的服务讲明白。
本书特色
  ..第一本完整讲述使用Java 标准规范实现REST 的书籍。
  ..第一本完整讲述以JAX-RS 2.0 参考实现实践Jersey 的书籍。
  ..给出深度学习和实践JAX-RS 的线路图和解决方案。
读者对象
  本书从实践角度,完整地诠释了JAX-RS 2.0(JSR 339 ),即Jersey 2.0 的核心元素和REST 开发过程。面向所有在Java 领域学习和使用REST 的读者。同样欢迎REST 领域的其他语言的使用者通过本书了解REST 的实现。
  ..技术路线:架构师、技术主管、研发工程师、REST 小白(网络用语,本书指新手);
  ..管理路线:部门经理、项目经理、产品经理;
  ..敏捷实践者。
如何阅读本书
  本书收纳了笔者近三年的RESTful 实战经验,将REST 理论与Java 实现相结合,循序渐进地将使用Java 开发REST 式的Web 服务中遇到的知识点和经验呈现给读者。每个章节中的知识点都精心设计了相应的示例代码,便于读者更好地理解和更及时地进行实践。从第11 章开始,笔者从敏捷角度为读者呈现了一个完整和相对复杂的REST 式的Web 服务实例,相信这个实例能让读者更好地理解相关内容,同时,可以对敏捷开发和自动化测试有新的认识。
  全书分为3 篇,共11 章。
  第一篇共5 章(第1 ~5 章),讲述REST 的基本理论和Jersey 的基本实践。完成第一篇的阅读和示例代码的实践,读者可以学会使用Java 开发REST 式的Web 服务的基本能力。
  第1 章 分别阐述了REST、REST 式的Web 服务、JAX-RS 2.0 和Jersey 2.x 的基本情况。
  第2 章 讲述了使用Jersey 2.x 开发一个基于JAX-RS 2.0 标准的应用的基本知识以及如何使用Jersey 来集成Spring 和JPA 以快速开发一个REST 式的Web 服务。本章包含10 个示例项目。
  第3 章 深入阐述了如何使用Jersey 设计和实现REST 式的Web 服务的API。本章包含5 个示例项目。
  第4 章 深入阐述了Jersey 的Providers 对REST 请求的处理。
  第5 章 讲述了Jersey 的客户端开发的基本实践和常用配置。
  第二篇共5 章(第6 ~10 章),讲述写好REST 程序的必要知识点。完成第二篇的阅读和实践,读者可以全面了解如何写好一个完整的REST 式的Web 服务。
  第6 章 全面讲述了如何实现一个安全的REST 式的Web 服务。
  第7 章 讲述了Jersey 的测试框架及其使用。
  第8 章 讲述了Jersey 对HTML5 的SSE 的支持和异步请求处理。
  第9 章 讲述了Jersey 1.x 迁移到Jersey 2.x 的要素和经验分享。
  第10 章 分享了REST 式的Web 服务的性能调优的经验。
  第三篇包含1 章(第11 章),分享了5 年外企工作中,我对自动化测试和敏捷的体会。完成本部分内容的阅读和实践,读者可以更宏观地审视REST 的应用场景,起到抛砖引玉的作用。
  第11 章 讲述一个完整的REST 项目的全过程。
  全文由三个小版组成:“阅读指南”、“小白讲堂”(为某些在知识点上比较“小白”的同学介绍概念性的知识)和“宅人坑事”(技术宅最自豪和最担惊受怕的就是“踩坑”),旨在和读者分享基础知识和心得体会,只为交流,切勿对号入座。
  第一篇推荐研发工程师和REST 小白完整阅读,这部分包含了了解和使用JAX-RS 2.0 完成学习和工作的必要章节。对于有基础的技术人员,可以作为实践的参考有选择地阅读。
  第二篇推荐致力于提高自己的技术人员完整阅读,这部分包含了JAX-RS 2.0 的高级功能。永不满足和持续学习的精神,会让你在关键时刻成为“关键先生”。架构师和项目经理在考虑安全、性能等问题时,可以参考相关章节。
  第三篇推荐渴望实战指导的技术人员阅读和跟随实践。同时,该篇结合了笔者参与敏捷实践的体会,以scrum 的方式进行开发管理。因此,敏捷实践者和相关的部门经理可以参考。
  产品经理可以阅读与REST 特性相关的章节,这样可帮你在设计应用方面有所提高。
源代码
章节 源代码地址
第1 章~第10 章 https://github.com/feuyeux/jax-rs2-guide 
第11 章 https://github.com/feuyeux/jax-rs2-atup 
勘误和交流
  作为开发者,非常欢迎读者能与我一起交流JAX-RS 2.0 相关的技术。我的邮箱是:feuyeux@gmail.com,新浪微博是:六爷1_1。
  本书的勘误统计在https://github.com/feuyeux/jax-rs2-guide/wiki 中,欢迎读者批评指正。
致谢
  感谢我的夫人Caroline。写作期间,没有时间陪你共度周末,甚至没有精力陪你共度以2 开头的最后一个生日,也没有营造任何浪漫的气氛。我们的女儿从蹒跚学步到会唱儿歌,我没有更多的时间陪伴你们,而你一如既往地支持我,在此我对你表示深深的感谢。
  感谢机械工业出版社华章分社的杨福川。我最难忘的是最初谈到要出本书时与君一拍即合的快意,这为我此后动笔增添了无穷的动力和信心。同时,阁下给予我的信任和鼓励也极大地推动了本书的顺利完成。在此后一年多的交往中,我深深感受到了业内对杨福川专业水准的评价和他敬业的态度。
感谢  机械工业出版社华章分社编辑高婧雅专业和耐心的审阅和指正。我曾一度被这位可敬的东北妹子的严谨和勤奋打击,心生愧对华章精品精神的挫败感。但随着婧雅的不断鼓励和支持,我一遍遍改进着稿件,自信心得到了恢复,同时,内心得到了安慰,我没有偏离初心和那份原动力。非常感谢机械工业出版社华章分社和婧雅。
  感谢RedHat 公司姜宁师兄的技术校对,感谢阿里巴巴公司许晓斌的敏捷校对。
  最后,我要感谢Technicolor 敏捷团队中的每一位成员,正是与各位度过的每一天,才让我有资本和信心与广大读者分享在REST 式的开发中的经验和教训,并在本书中介绍自动化
测试和敏捷实践的相关知识。

上架指导

计算机\程序设计

封底文字

传统的Web服务是基于RPC风格的,其实现技术主要包含SOAP、WS标准栈等。RPC风格的Web服务用在分布式的、开放的环境中会带来一些问题,如技术架构复杂、可伸缩性差等,REST风格的Web服务足以解决上述问题。本书收纳了作者近3年的RESTful实战实践经验,将REST理论与Java实现相结合,循序渐进地将使用Java开发REST式的Web服务中遇到的知识点和经验呈现给读者。每个章节中的知识点都精心设计了相应的示例代码,便于读者更好地理解和更及时地实践。
在读者通读全书的前10章后,笔者从敏捷角度为读者呈现了一个完整和相对复杂的REST式的Web服务实例,相信这个实例能让读者更好地融会贯通,同时,可以对敏捷开发和自动化测试有新的认识。


多年前我在开发 Sonatype Nexus 的时候首次接触并熟悉了 Rest 风格的 Web 服务,这种风格使得我们的设计简单、规范且易测,Nexus 的大部分功能都可以通过一行简单的 curl 命令来验证,单凭这一点就足以让我喜爱上 Rest 风格。现如今,开发 Rest 风格的 Web 服务可简单多啦,尤其是如果你遵循 JAX-RS 2.0 标准并借助 Jersey 优秀的实现,编写 Rest 风格 Web 服务的难度就大大降低了。《Java Restful Web Service实战》全面生动地阐述了 JAX-RS 2.0 标准,不仅覆盖了 API、请求处理、安全等核心内容,更有异步通信、调优等高级主题,无疑是学习 Java Rest 风格 Web 服务的绝佳参考。韩陆技术功底扎实,在写作过程中潜心阅读了大量的 Jersey 源码,这也让《Java Restful Web Service实战》的质量得到了进一步的保障,相信本书定会助你在 Rest 的道路上更快更稳地前行。
——许晓斌 《Maven实战》作者

作者简介

韩陆 著:暂无简介

推荐序

Foreword推荐序一
——REST 开发的理想与现实

  REST 是一种分布式应用的架构风格,也是一种大流量分布式应用的设计方法论。REST 是由(构成了Web 基础架构的)HTTP、URI 等规范的主要设计者Roy Fileding 博士在其2000 年的博士论文(中文版名为《架构风格与基于网络应用软件的架构设计》)中提出的。到目前为止,关于REST 最系统、最全面的论述,仍然是Fielding 的博士论文。
  REST 就是Web(World Wide Web ,简称Web 或者WWW)本身的架构风格,是设计、开发Web 相关规范、Web 应用、Web 服务的指导原则。不符合REST 风格要求的架构和技术,很难在Web 这个生态系统中得到繁荣发展。在我看来,Roy Fielding 博士就是15 年以来对于分布式应用架构设计理论贡献最大的人。Fielding 在HTTP 规范的设计过程中,并没有采用当时大行其道的DO(Distributed Object ,分布式对象)风格,而是自出机杼、另辟蹊径,提出了一整套新的设计方法论。Fielding 的开创性工作,极大地推动了分布式应用设计理论的发展。
  有趣的是,其实基于SOAP/WSDL 的“大Web Service”(以下简称Web Service),几乎是与REST 同时发展起来的。虽然在Web Service 中也使用了对象,但是Web Service 其实是RPC 风格的,而不是DO 风格的。Web Service 在最初几年发展很快,很大原因是它解决了DO 风格难以解决的异构系统(不同的硬件系统、不同操作系统、不同的编程语言,等等)之间互操作性的问题。
  然而遗憾的是,设计Web Service 协议栈的核心人员,几乎都是来自于企业应用阵营的,尤其是来自于IBM 和微软两家公司的人。这些企业应用的专家们没有充分认识到Web 基础架构的巨大优点,甚至可以说并没有理解HTTP 协议究竟是用来做什么的、为何要如此设计。在Web Service 协议栈的设计之中,仍然有深深的企业应用痕迹。Web Service 虽然宣称能够很好地支持互操作,然而因为协议栈的复杂性很高,在实战中互操作性并不好(例如升级过程困难而且复杂)。此外,Web Service 仅仅将HTTP 协议当做一种传输协议来使用,还依赖XML 这种冗余度很高的文本格式,这导致Web Service 应用性能低下。很多开发团队宁可使用Hessian 等轻量级的RPC 协议,也不愿意使用Web Service 。在面向互联网的大流量Web 应用(包括Web 服务在内)这种运行环境中,Web Service 在复杂性、互操作性、性能、可伸缩性等方面的短板更加突出。因此,设计今日面向互联网的API,已经很少有人会考虑Web Service 。这使得Web Service 的使用被局限在企业应用运行环境之中,其名称中的“Web ”更像是一个笑话(除了都使用HTTP 协议,基本上与Web 没什么关系)。假如在2000 年,设计Web Service 规范的专家们,能够认真读一下Fielding 的博士论文,或者找HTTP、URI 等Web 基础架构规范的核心设计人员深入交流一下,Web Service 很可能就不是现在这个样子了。不过,历史是无法假设的。
  在Java 世界中,与大Web Service 相对应的规范是JAX-WS。在大Web Service 已经成为明日黄花之后,Java 世界急需一套新的规范来取代JAX-WS。这套新的规范就是JAX-RS :Java 世界开发RESTful Web Service (与RESTful API 含义相同,可混用)的规范。虽然起步很晚,毕竟走上了正确的道路。
  从Java EE 6 开始,JAX-RS 在Java EE 版图中,作为最重要的组成部分之一,逐步取代了JAX-WS 的地位。在所有Java EE 相关规范中,JAX-RS 是优点很突出的一个。例如,完全基于POJO、很容易做单元测试、将HTTP 作为一种应用协议而不是可替代的传输协议(因此提高了性能)、优秀的IDE 集成,等等。可以说,在大多数场合,JAX-RS 完全可以取代JAX-WS,作为Java Web Service 开发的主要技术。JAX-RS 同样也可以完全取代Hessian 等基于HTTP 协议的RPC 风格远程调用协议。毕竟HTTP 本身就是一种REST 风格的应用协议,以REST 风格来使用HTTP,才是最高效的使用方式。
  Jersey、CXF 等支持JAX-RS 规范的REST 开发框架还支持输出WADL 。WADL 支持客户端代码自动生成,还可以将WADL 导入到SoapUI 等测试工具中,然后做自动化集成测试。从开发Java 企业应用、取代JAX-WS 的角度来看,JAX-RS 已经做得非常棒了。
  尽管如此,不可不提的是,JAX-RS 这套规范,仍然存在着很多遗憾。需要特别指出的是,JAX-RS 规范并不等于REST 架构风格本身,REST 的内涵要比JAX-RS 广泛得多。学会了使用JAX-RS 了,并不等于就完全理解了REST,开发者仍然需要下工夫认真学习一下本源的REST 究竟是什么。
  例如,JAX-RS 规范对于应该如何定义一个资源,以及应该如何使用HTTP 作为一个统一接口来操作资源,显然缺乏必要的指导。有很多开发者只是简单地将以前JAX-WS 中的一个endpoint 接口转换成一个资源接口。接口的方法太多,导致映射到的HTTP 方法不够用,这也难不倒他们,在URI 路径中加一些字符串就能够解决(例如,三个接口方法都映射到POST,但是其PATH 不同)。这样的开发方式非常常见,虽然开发者使用了JAX-RS 规范,但是开发方式完全是RPC 风格的,可以说与REST 风格没有任何关系。
  此外,JAX-RS 规范目前尚不支持HATEOAS (将超文本作为应用状态的引擎,REST 风格的核心特征之一),从著名的Richardson 成熟度模型(由《RESTful Web APIs 》的作者Richardson 提出)来衡量,基于JAX-RS 规范实现的RESTful API 仅仅能够达到成熟度模型的第二级,即支持资源抽象、统一接口的“CRUD 式Web 服务”。
  可以这样说,JAX-RS 规范与真正的REST 风格,覆盖的范围其实是不同的。JAX-RS 覆盖的是简单基于HTTP 协议(没有使用SOAP/WSDL)的各种远程调用需求,很多需求对于可伸缩性、松耦合的要求并不高,仅仅是希望使用HTTP 本身来取代大Web Service 作为一种轻量级、容易测试的远程调用协议。REST 架构风格的严格要求,在这些场合并不是非常重要。慵懒是人类的天性,大多数开发者写代码只是为了解决手头的问题,JAX-WS 并不好用,JAX-RS 解救了他们。
  如果按照Roy Fielding 博士的严格要求(REST APIs must be hyper-text driven),那么包括JAX-RS 规范在内都不能算是真正的RESTful。然而,从实战角度,我认为革命不分先后,只要能够达到Richardson 成熟度模型第一级,即有清晰的资源抽象,就可以认为是RESTful API 了。如果连第一级都达不到,所设计的架构根本就不是面向资源的,那八成还是RPC 风格的,就没有必要非要往RESTful API 阵营里面挤了。从来没有人说过RPC 就是万恶的,RPC 在企业应用的大多数场合其实都非常有效,只是不适合面向互联网的大流量Web 应用而已。
  因此,能够完美支持HATEOAS ,攀登到成熟度模型第三级,是一种理想情况(当然也是值得追求的)。而通过部分拥抱REST 风格的要求,来更好地解决手头的问题,是更多开发者所面对的现实情况。JAX-RS 反映的正是这种现实情况,从实战的角度,它是一套非常有用也很好用的规范。
  韩陆兄的新著《Java RESTful Web Service 实战》是JAX-RS 规范方面的专著,也是国内第一本REST 开发的原创著作。这本书的实战性非常强,全面介绍了JAX-RS 2.0 的方方面面,可以作为一线Java 分布式应用开发者的案头必备书。如同我在前面所指出的,JAX-RS 规范并不等于REST 架构风格本身,它们有着不同的覆盖范围。在本书中,作者也介绍了很多设计RESTful API 的最佳实践,这些内容假如读者不理解REST,甚至在亲自阅读了JAX-RS 规范之后也未必能够总结出来。读者在阅读本书的过程中,不应该仅仅满足于掌握了JAX-RS 开发的基本方法、解决了手头的问题、用其完全取代JAX-WS,更重要的是,读者还应该就REST 架构风格本身做更多的学习。幸运的是,除了本书之外,目前REST 设计和开发方面的图书资料已经非常多了。
  本书的内容非常严谨,有非常好的系统性,对于设计开发大流量Web 服务会面临的各种问题都有涉及。特别是在自动化测试方面着墨颇多,在我看来是本书的一大亮点。RESTful API 的自动化测试非常重要,需要在设计之初就充分考虑到。本书是一本难得的原创佳作,值得所有Java 分布式应用的开发者购买。
  理想富丽丰满,现实贫瘠骨感,追求理想和注重解决现实问题其实并不矛盾。JAX-RS 规范的发展,反映出了Java 社区在更好地开发RESTful Web Service 方面的求索。尽管存在争议,在我看来,规范化是推动RESTful Web Service 取得更大发展的必由之路。目前对于优秀的RESTful API 有哪些判断标准,Web 开发者社区已经达成了高度共识,也积累了大量非常有价值的成果。JAX-RS 规范的发展,离不开Web 开发者社区的这些成果。在未来的JAX-RS 3.0 规范中,我们将会看到更多令人兴奋的成果被规范化。JAX-RS 2.0 已经做得不错了,但是在RESTful Web Service 规范化的道路上,其实才刚刚起步,任重而道远。

李锟于上海


Foreword
推荐序二

  半年前初识韩陆的时候,我们就聊到他正在写的这本书,当得知我从2006 年就参与了Apache CXF 开发,他立即邀请我为他的新书写序,我也就欣然答应了。
  Apache CXF 作为JAXWS 以及JAX-RS 规范的实现框架,已经成为很多Web 服务开发者必选的开发框架。作为这一框架的开发维护者之一,我的日常工作经常需要熟悉这些JSR 规范,并实现JSR 所定义的API,解决最终用户的使用问题。
  熟悉Java 的人大多都听说过JSR(Java Speci.cation Requests )、JCP(Java Community Process),通过JSR 可以就Java 某一方面的应用定义一组标准的API 或者服务。对于最终用户来说,他们的代码只需要调用JSR 定义的标准API,不做任何修改就可以调用不同的JSR 实现。这里常见的例子就是Java Servlet 应用,用户开发的Web 应用可以不做任何修改就部署到Tomcat 、JBoss 等不同的Web 容器中。
  JAXRS 是JCP 为Java RESTful Web Service 定义的一套API。由于Web 服务的描述模型与Java 类和接口有一定的差距,JAX-RS 定义了很多annotation,通过这些annotation 我们可以很方便地将Java 类描述成为相关的REST 服务。由于RESTful Web Service 通常需要部署到Web 容器中,JAX-RS 也定义了相关服务来发现部署到容器中的JAX-RS 应用。
  读过JSR 规范的朋友或多或少都会有这样的体会,JSR 作为规范文档,其目标是将API 定义以及实现功能描述清楚、完备,其目标读者是相关API 的实现人员,或者是相关API 的高级使用人员。如果读者对相关的背景知识还不熟悉的话,JSR 文档读起来会比较晦涩而且难以理解。加之绝大部分JSR 文档都没有相关的中文翻译,对于绝大多数初学者来说,通过阅读JSR 文档来学习相关的API 的知识是一个艰难的过程。
  如果我们想要对JAX-RS 规范有一个比较快速并且全面的了解应该怎么办呢?一般来我们可以通过JSR 的相关参考实现入手,我们不但可以通过运行相关的参考实现的例子快速入门,还可以通过跟踪相关的代码对实现细节有一个全面的了解。韩陆的这本新作以JAX-RS 的参考实现Jersey 为蓝本,由浅入深地向大家介绍了JAX-RS 的由来,以及与RESTful Web 服务开发的相关API,并结合实例分享了作者的实战经验。
  好了,现在打开你熟悉的IDE 工具,加载Jersey 代码库,沿着本书的指引去探索Java RESTful Web Services 开发世界吧。

RedHat 姜宁

图书目录

推荐序一
推荐序二
前言
第一篇 够用就好——JAX-RS 2.0 基础
第1 章 JAX-RS 2.0 入门
1.1 解读REST 2
1.1.1 一种架构风格
1.1.2 基本实现形式
1.2 解读REST 服务5
1.3 解读JAX-RS 8
1.4 Jersey 项目概要17
1.5 Java 领域的其他REST 实现
1.5.1 其他JAX-RS 实现
1.5.2 其他REST 实现
1.6 本章小结
第2 章 JAX-RS 2.0 快速实现 21
2.1 第一个Java REST 服务 21
2.1.1 环境准备 22
2.1.2 创建服务 23
2.1.3 扩展服务 28
2.1.4 测试和运行服务 31
2.2 第一个Servlet 容器服务 32
2.2.1 创建和分析Web 服务 32
2.2.2 Jetty 插件与REST 服务 35
2.2.3 运行在Servlet 容器 38
2.2.4 运行在Java EE 容器 39
2.3 REST 服务类型 40
2.4 REST 应用描述 45
2.4.1 应用的描述 46
2.4.2 资源的描述 46
2.4.3 WADL 的配置 47
2.5 第一个完整的REST 服务 48
2.5.1 定义资源 48
2.5.2 集成Spring 51
2.5.3 集成JPA 53
2.5.4 集成jQuery 55
2.5.5 请求处理流程分析 57
2.6 REST 调试工具 64
2.6.1 命令行调试工具cURL 64
2.6.2 基于浏览器的图形化调试插件 66
2.7 本章小结 69
第3 章 REST API 设计 70
3.1 REST 统一接口 70
3.1.1 GET 方法 71
3.1.2 PUT 方法 73
3.1.3 DELETE 方法 75
3.1.4 POST 方法 76
3.1.5 WebDAV 扩展方法 77
3.2 REST 资源定位 79
3.2.1 资源地址设计 79
3.2.2 @QueryParam 注解 81
3.2.3 @PathParam 注解 83
3.2.4 @FormParam 注解 86
3.2.5 @BeanParam 注解 88
3.2.6 @CookieParam 注解 88
3.2.7 @Context 注解 89
3.3 REST 传输格式 90
3.3.1 基本类型 90
3.3.2 文件类型 90
3.3.3 InputStream 类型 91
3.3.4 Reader 类型 92
3.3.5 XML 类型 93
3.3.6 JSON 类型 96
3.4 REST 连通性 112
3.4.1 过渡型链接 113
3.4.2 结构型链接 114
3.5 REST 响应处理 114
3.5.1 返回类型 115
3.5.2 处理异常 117
3.6 REST 内容协商 119
3.6.1 @Produces 注解 119
3.6.2 @Consumes 注解 121
3.7 本章小结 122
第4 章 REST 请求处理 123
4.1 REST 和AOP 123
4.2 Providers 详解 124
4.2.1 实体Providers 124
4.2.2 上下文Providers 129
4.3 REST 请求流程 130
4.4 REST 过滤器 132
4.4.1 ClientRequestFilter 132
4.4.2 ContainerRequestFilter 133
4.4.3 ContainerResponseFilter 134
4.4.4 ClientResponseFilter 135
4.4.5 访问日志 136
4.5 REST 拦截器 138
4.6 绑定机制 140
4.7 优先级 144
4.8 本章小结 145
第5 章 REST 客户端 146
5.1 客户端接口 146
5.1.1 Client 接口 147
5.1.2 WebTarget 接口 148
5.1.3 Invocation 接口 148
5.2 资源释放 149
5.3 连接器 150
5.4 封装Client 153
5.5 本章小结 154
第二篇 全面掌握——JAX-RS 2.0 进阶
第6 章 REST 安全 156
6.1 身份认证 157
6.1.1 基本认证 157
6.1.2 摘要认证 158
6.1.3 表单认证 158
6.1.4 证书认证 159
6.2 资源授权 160
6.2.1 容器管理权限 160
6.2.2 应用管理权限 163
6.3 认证与授权实现 163
6.3.1 基本认证与JDBCRealm 164
6.3.2 摘要认证与UserDatabase-Realm 170
6.3.3 表单认证与DataSource-Realm 173
6.3.4 表单认证与JAASRealm 177
6.3.5 证书认证与UserDatabase-Realm 180
6.4 JAX-RS 2.0 实现 184
6.5 其他安全考虑 187
6.6 本章小结 188
第7 章 REST 测试 189
7.1 Jersey 测试框架 189
7.2 单元测试 192
7.2.1 集成Spring 的单元测试 192
7.2.2 异步测试 194
7.3 集成测试 194
7.4 日志增强 195
7.5 本章小结 195
第8 章 REST 推送与异步通信 196
8.1 服务器—浏览器通信 196
8.1.1 Polling 技术 197
8.1.2 Comet 技术 197
8.1.3 SSE 技术 199
8.1.4 WebSocket 技术 199
8.2 SSE 详述 200
8.2.1 Java 并发 200
8.2.2 SSE 流程 202
8.2.3 SSE 实现 204
8.3 异步通信 209
8.4 JAX-RS 2.0 实现异步通信 211
8.4.1 服务端实现 211
8.4.2 客户端实现和测试 213
8.5 本章小结 215
第9 章 Jersey 1.x 迁移 216
9.1 变更Maven 依赖定义 216
9.2 客户端迁移 217
9.2.1 Client 接口迁移 217
9.2.2 WebTarget 接口迁移 218
9.2.3 QueryParam 219
9.3 服务器端迁移 219
9.4 本章小结 220
第10 章 JAX-RS 调优 221
10.1 使用缓存优化负载 221
10.1.1 缓存协商 221
10.1.2 条件GET 223
10.1.3 REST 缓存实践 224
10.1.4 ab 测试 226
10.2 使用版本号优化服务 226
10.2.1 何时使用版本号 227
10.2.2 如何使用版本号 227
10.3 使用参数配置优化服务 229
10.3.1 通用配置 229
10.3.2 服务器端配置 230
10.3.3 客户端配置 231
10.4 Java 虚拟机调优 232
10.4.1 虚拟机概述 232
10.4.2 内存溢出与内存泄漏 235
10.5 本章小结 236
第三篇 实践分享——JAX-RS 2.0 综合
第11 章 统一自动化测试平台 238
11.1 ATUP 的定义 238
11.1.1 需求仓库 239
11.1.2 需求分析 241
11.1.3 迭代规划 242
11.2 ATUP 的设计 244
11.2.1 开发和部署环境 244
11.2.2 模块定义和拓扑 247
11.2.3 持续集成流程 248
11.3 ATUP 的实现 250
11.3.1 Sprint1 核心功能 250
11.3.2 Sprint2 模块功能 281
11.3.3 Iteration1 的演示和回顾 288
11.3.4 Sprint3 持续交付 291
11.3.5 交付和总结 293
11.4 本章小结 293
附录 Web 简史 294
参考资料 297
后记 298

教学资源推荐
作者: (美)Kenneth C.Louden
作者: 邱李华 郭志强 曹青
作者: 刘艺
参考读物推荐