- 定价:¥69.00
- POD价:¥79.00
- 评分:
(已有11条评价)
- 电子书:Java RESTful Web Service实战[按需印刷]
- 促销活动:
- 我要买:
- ·如此书原封面缺失,印刷将采用出版社授权的新封面;
- ·如电子文件出现问题,可能延长印制周期,我们将提前与您沟通
基本信息

编辑推荐
首本讲解基于JAVA标准规范实现REST的专著,阿里巴巴JAVA技术专家12年开发经验结晶,3位业内著名技术专家联袂推荐!
深刻解读JAX-RS标准和API设计,Jersey的实用要点和实现原理,以及基于REST的Web服务的设计思想、原则和特点。
内容简介
计算机书籍
国内首本完整、深度地讲解如何基于Java标准规范实现REST风格的Web服务的专著,阿里巴巴Java技术专家12年开发经验结晶,3位业内著名技术专家联袂推荐!不仅深刻解读了最新的JAX-RS标准和其API设计,以及Jersey的使用要点和实现原理,而且系统讲解了REST的基本理论,更重要的是从实践角度深度讲解了如何于Jersey实现完整的、安全的、高性能的REST式的WebB服务。
全书共11章,分为三篇。第一篇(第1-5章)系统讲解了REST的基本理论和Jersey的基本实践,旨在帮助读者具备使用Java开发REST式的Web服务的基本能力。第二篇(第6-10章)深入讲解了写好REST程序的必要知识点,旨在帮助读者全面了解如何写好一个完整的、安全的、高性能的REST式的Webg服务。第三篇(第11章)分享了笔者S年外企工作生涯中对自动化测试和敏捷的体会,希望可以帮助读者更宏观地审视REST的应用场景,给读者启发。
《Java RESTful Web Service实战》包含对部分源代码的解读,也包含大量示例和实现代码,还包含大型的、完整的项目示例。除此之外,本书还包括“阅读指南”、“小白讲堂”、“宅人坑事”等知识模块,旨在帮助读者能在愉悦中更好地阅读本书。
作译者
目录
推荐序一
推荐序二
前言
第一篇 够用就好——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
前言
此间,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 的基本情况。
序言
——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 规范化的道路上,其实才刚刚起步,任重而道远。
李锟于上海
书摘
够用就好——JAX-RS 2.0 基础
第1 章JAX-RS 2.0 入门
第2 章JAX-RS 2.0 快速实现
第3 章REST API 设计
第4 章REST 请求处理
第5 章REST 客户端
Chapter 1
第1 章
JAX-RS 2.0 入门
本章逐一介绍以下4 个概念:REST、REST 式的Web 服务、JAX-RS 标准和Jersey 项目。首先简要介绍一下这4 个概念之间的联系:REST 是一种跨平台、跨语言的架构风格,REST 式的Web 服务是对REST 在Web 领域的实现;JAX-RS 标准是在Java 领域,对REST 式的Web 服务制定的实现标准,Jersey 是JAX-RS 标准的参考实现,是Java EE 参考实现项目GlassFish 的成员项目。
1.1解读REST
REST(Representational State Transfer ,表述性状态转移),源于REST 之父Roy Thomas Fielding 博士在2000 年就读加州大学欧文分校期间发表的一篇学术论文——《Architectural Styles and the Design of Network-based Software Architectures 》
。论文中提出了REST 的6 个
特点,分别是:客户端-服务器的、无状态的、可缓存的、统一接口、分层系统和按需编码。在此不敢“班门弄斧”,希望读者阅读一下这部开山之作,以此理解REST 产生的原因和特点。
REST 具有跨平台、跨语言的优势。从其诞生开始,广泛地得到了诸多语言的快速支持,比较著名的是ROR(Ruby on Rails )。ROR 非常强调规约大于配置的理念,这一理念被诸多框架和工具支持——包括以Python 领域的Django、Groovy 领域的Grails 为代表的框架,以及Maven、Gradle 为代表的构建工具等,但REST 本身只规定了面向资源,并没有包含如何定义和约束一个资源的标准。因此要提示读者,很多实现了REST 的框架和工具所具备的特质,其全部特征未必都是REST 定义的,包括本书要讲的JAX-RS 标准的定义和Jersey 等JAX-RS 的实现。
该论文的中文版译于2007 年,中文名为《架构风格与基于网络的软件架构设计》,此后再次修订,名为《架构风格与基于网络应用软件的架构设计(中文修订版)》,详见本书的参考资料。
REST 在众多平台和语言上的支持,不仅包括上述列举的传统编程语言、脚本语言,还包括Node.js 这样新兴的服务器端脚本语言。REST 的无状态,代理友好性等优势,使对其支持的实现更加方便和简洁。
阅读指南
至于为什么REST 的出现影响了今天的互联网,以及Web 的发展历程,可参阅附录中的Web 简史。