REST是一种分布式应用的架构风格,也是一种大流量分布式应用的设计方法论。REST是由(构成了Web基础架构的)HTTP、URI等规范的主要设计者RoyFileding博士在其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风格难以解决的异构系统(不同的硬件系统、不同操作系统、不同的编程语言,等等)之间互操作性的问题。

在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 是优点很突出的一个。例如,完全基于P0JO、很容易做单元测试、将HTTP作为一种应用协议而不是可替代的传输协议(因此提高了性能)、优秀的IDE集成,等等。可以说,在大多数场合, JAX-RS 完全可以取代JAX-WS,作为Java Web Service 开发的主要技术。JAX-RS 同样也可以完全取代Hessian等基于HTTP协议的RPC风格远程调用协议。毕竟HTTP本身就是一种REST风格的应用协议,以REST风格来使用HTTP,才是最高效的使用方式。

熟悉Java的人大多都听说过JSR ( Java Specification Requests)、 JCP ( Java CommunityProcess),通过JSR可以就Java某一方面的应用定义. - -组标准的API或者服务。对于最终用户来说,他们的代码只需要调用JSR定义的标准API,不做任何修改就可以调用不同的JSR实现。这里常见的例子就是Java Servlet 应用,用户开发的Web应用可以不做任何修改就部署到Tomcat.JBoss等不同的Web容器中。

JAXRS是JCP为Java RESTful Web Service定义的一套API。由于Web服务的描述模型与Java类和接口有一定的差距,JAX-RS 定义了很多annotation,通过这些anrnotation我们可以很方便地将Java 类描述成为相关的REST服务。由于RESTful Web Service 通常需要部署到Web容器中,JAX-RS也定义了相关服务来发现部署到容器中的JAX-RS应用。

如果我们想要对JAX-RS规范有一个比较快速并且全面的了解应该怎么办呢? 一般来我们可以通过JSR的相关参考实现人手,我们不但可以通过运行相关的参考实现的例子快速入门,还可以通过跟踪相关的代码对实现细节有一个全面的了解。

这份阿里大佬的的这份新作以JAX-RS的参考实现Jersey为蓝本,由浅入深地向大家介绍了JAX-RS的由来,以及与RESTfulWeb服务开发的相关API,并结合实例分享了作者的实战经验。好了,现在打开你熟悉的IDE工具,加载Jersey代码库,沿着本书的指引去探索JavaRESTful Web Services开发世界吧。

第1章JAX-RS2入门

本章将详细讲述REST服务( RESTful Web Service) 的概念、生态环境,并通过简单的示例,使读者快速掌握REST服务开发的基本能力。

 

第2章REST API设计

设计和开发REST式的Web服务除了要掌握JAX-RS2标准,还要对统一接口、 资源定位以及请求处理过程中REST风格的传输数据的格式、响应信息等有良好的认知。此外,设计良好的REST API应当对内容协商、资源地址信息(ink)有良好的支持。本章将详细讨论这些技术细节。

 

第3章REST请求处理

设计良好的REST API除了要符合关于统一接口和资源定位等要求,还要详细考虑通用的请求处理过程中每个步骤的特殊处理,并设计出符合业务规范的处理流程。本章将深入REST请求处理过程中的扩展点,并讲述如何对其实现。

 

第4章REST服务与异步

有时,异步可以为REST服务带来更强大的功能、提高服务的性能以及提升用户体验。本章将详述异步机制和异步通信,以及基于JAX-RS2标准的实践。首先我们将一起思 考,异步机制到底有什么用处,随后详述JAX-RS2定义的异步请求处理规范。在异步机制的理论和实践之后,我们分别讲述基于HTTPI.1协议和HTMLS的异步通信。

 

第5章REST客户端

有关REST客户端的实例贯穿每一章的实例中,因为本书提倡单元测试,每个实例中的单元测试皆使用了REST客户端。比如有关安全性的客户端实例可以参考相关章节的代码,本章实例主要针对通用接口和连接器实践。

 

第6章REST测试

本章讲述如何使用Jersey提供的测试框架实现对基于JAX-RS2的Web服务进行自动化测试。自动化测试是软件质量保证的必要手段,是解放开发团队于重复劳动的法宝。同时也是敏捷开发的重要环节,项目源代码的代码覆盖率即指测试代码中对源代码的公有方法的覆盖情况,是CI (Continuous Integration, 持续集成)和CD (Continuous Delivery,持续交付)中的重要指标之一。使用JUnit结合Jersey的测试框架,能够轻松地实现单元测试、CI测试和系统测试。Jersey提供了4种内置容器,测试过程对外置容器没有天然的依赖。

 

第7章微服务

本书的读者在微服务上已经占得先机,那就是具备设计和实现HTTP+JSON服务接口的能力。那么,以此为起点,如何才能掌握微服务技术栈呢?首先是向下的能力,除去设计思想这些依赖于思考、视野和经验等因素,从实践角度上说我们需要Spring Boot帮助我们快速开发、快速部署,需要Spring Cloud帮助我们确保系统的高可用,需要Docker等容器技术帮助我们实现弹性部署和运维。这些技术也许应对微服务还不够全面,但在我看来,它们是微服务主要的技术基础。本章将分别讲述SpringBoot和SpringCloud,第8章将讲述Docker等容器技术。

 

第8章容器化

如今,以Docker.CoreOS、Kubernetes等为代表的容器技术正以迅猛的速度发展着,容器生态圈欣欣向荣。同时,容器化是REST服务新的部署形态,有了容器技术,REST 服务焕发了新的生命力。本章将以REST以及微服务的部署为目标,交代必要的Docker知识,并着重讲述微服务的容器化实战。本书在Docker以及容器技术上的讲述非常有限,若读者对这个领域有兴趣,还请阅读专门的书籍和资料。

 

第9章JAX-RS调优

基于JAX-RS的项目是部署在Servlet容器或者Java EE容器的Web服务,因此要提高这类项目的性能,除了在编码阶段需要注意代码的质量,在配置部署阶段还要关注于网络负载、Jersey 参数配置以及对Java虚拟机调优,在运行阶段还要对运行平台的操作系统、服务器软件进行监控和调优。本章将讲述如何为基于JAX-RS的项目进行调优。

 

第10章REST安全

REST服务提供了统一接口和资源定位,简化了Web服务接口的设计和实现,降低了Web服务的复杂度。与此同时,易于识别和理解的REST接口也潜在着易于被攻击的危险。如果破坏者通过对Web服务资源地址的猜解,获取了删除某一资源的接口并对该Web服务进行攻击,很容易造成系统数据的破坏。因此,REST 式的Web服务的安全性至关重要。本章将对REST的安全性进行全面的讲述。

 

转发+关注,然后私信回复关键字 “666” 即可获得《Java RESTful Web Service实战 第2版》电子版