读书笔记《building-a-restful-web-service-with-spring》以下是一些基本知识
随着互联网的兴起和 HTTP在当今世界的普及,web services已经成为基于web的系统的主要手段互操作。 Web 服务是一个接口,它提供对面向 Web 的系统的访问,以供客户端和其他服务使用。
简单对象访问协议(SOAP)用于成为构建此类服务的实际选择。 SOAP 是 一种基于 XML 的通信协议,利用了开放标准。然而,近年来 Representational State Transfer (REST)成为传统 SOAP Web 服务的非常流行的替代品。那么,让我们来看看 REST 背后的原理。本章将涵盖以下主题:
讨论 REST 原则
Spring 框架如何帮助构建 RESTful Web 服务
一个示例 RESTful Web 服务,它将为本书的其余部分提供背景
REST 是一种用于创建可扩展 Web 服务的软件架构 方法。 REST 一词是由 Roy Fielding 在他的博士论文中创造的,它围绕着许多 原则。这些原则支撑着 RESTful Web 服务的架构,并在以下部分中进行了描述。
REST 的核心是资源, 资源使用 统一资源标识符(URI)。从概念上讲,资源与其表示(即提供给客户的格式)是分开的。 REST 不强制要求任何特定格式,但 通常包括 XML 和 < span class="strong">JSON(将在 在 第 4 章,数据表示)。
此外,资源表示是自描述的。更具体地说,这意味着必须返回足够的 信息才能成功处理响应。
REST 的另一个独特属性是客户端完全通过超媒体进行交互,超媒体由应用程序服务器动态提供。除了端点,客户端不需要事先了解如何与 RESTful 服务交互。这个约束被称为 Hypermedia as the Engine of Application State ( HATEOAS)。
REST 采用的客户端-服务器模型能够将客户端关注点(例如用户交互 )或用户状态管理与服务器关注点(例如数据存储)分离和可扩展性。
这种解耦确保了,只要提供一个约定的接口,客户端和服务器的开发就可以独立完成。它还有助于降低复杂性并提高性能调整的有效性。
RESTful Web 服务必须 提供缓存功能。服务器可以指示缓存响应的方式和时间。客户端可以使用缓存的响应而不是联系服务器。
Tip
该原则对于可扩展性具有显着优势。缓存技术将在第 6 章中讨论,性能。
由于 REST 通常利用 HTTP,因此它继承了 HTTP 提供的所有缓存属性。
鉴于客户端和服务器之间的通信方式,客户端不知道他们正在与哪个特定服务器进行交互。此属性允许引入中间 服务器,例如,可以处理安全性或提供负载平衡功能。这些架构概念在第 10 章,扩展 RESTful Web 服务中有更详细的讨论。
假设读者熟悉Spring Framework(简称Spring 从这里开始)。因此,在本节中,我们将 关注使用 Spring 构建 RESTful Web 服务的特殊性。
由于 REST 依赖于 URI,因此 Spring Web MVC 框架 提供了所有必要的工具用于构建 RESTful 端点。注解,例如 org.springframework.web.bind.annotation.RequestMapping
和 org.springframework.web.bind.annotation.RequestParam
用于映射 URL 和参数是创建此类端点的基础。 第 3 章,第一个端点,将讨论这些注释并提供代码示例来说明它们的使用。
Note
关于 Spring Web MVC 的参考文档可以在 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html< /一>。
介绍完技术背景后,现在让我们来看一个这样的 RESTful 服务。在本书中,我们将构建一个示例 Web 服务来帮助管理酒店和 B&B。
酒店业中使用的一个常见的软件是物业管理系统(细心的读者会注意到这些系统的不幸缩写)。它允许自动化酒店和 B&B 的运营。出于本书的目的,我们将使用 Spring 构建这样一个系统。该系统的每个组件都将公开一个 RESTful API 将被使用通过一个简单的网络界面。
在本节中,我们将查看 支持我们的 web 的数据模型服务。以下实体关系图提供了此模型的概述:
数据访问层将使用 Object-Relational Mapping( span class="strong">ORM) 与 Hibernate 4.3.8。
Tip
在本书中,我们不会深入研究 Hibernate ORM 的特性。但是,文档 在 Hibernate.org 上的 http://hibernate.org/orm/。
此外,为了简化我们的 Web 服务的开发和测试,我们将使用嵌入式 H2 数据库。
Note
关于 H2 的文档 可以在 找到http://www.h2database.com。
Hibernate 支持开箱即用的 H2,因此无需特定设置即可将其用作我们的嵌入式数据库。