vlambda博客
学习文章列表

读书笔记《building-a-restful-web-service-with-spring》以下是一些基本知识

Chapter 1. A Few Basics

随着互联网的兴起和 HTTP在当今世界的普及,web services已经成为基于web的系统的主要手段互操作。 Web 服务是一个接口,它提供对面向 Web 的系统的访问,以供客户端和其他服务使用。

简单对象访问协议SOAP)用于成为构建此类服务的实际选择。 SOAP 是 一种基于 XML 的通信协议,利用了开放标准。然而,近年来 Representational State Transfer (REST)成为传统 SOAP Web 服务的非常流行的替代品。那么,让我们来看看 REST 背后的原理。本章将涵盖以下主题:

  • 讨论 REST 原则

  • Spring 框架如何帮助构建 RESTful Web 服务

  • 一个示例 RESTful Web 服务,它将为本书的其余部分提供背景

REST principles


REST 是一种用于创建可扩展 Web 服务的软件架构 方法。 REST 一词是由 Roy Fielding 在他的博士论文中创造的,它围绕着许多 原则。这些原则支撑着 RESTful Web 服务的架构,并在以下部分中进行了描述。

Uniform interface

REST 的核心是资源, 资源使用 统一资源标识符URI)。从概念上讲,资源与其表示(即提供给客户的格式)是分开的。 REST 不强制要求任何特定格式,但 通常包括 XML 和 < span class="strong">JSON(将在 第 4 章数据表示)。

此外,资源表示是自描述的。更具体地说,这意味着必须返回足够的 信息才能成功处理响应。

REST 的另一个独特属性是客户端完全通过超媒体进行交互,超媒体由应用程序服务器动态提供。除了端点,客户端不需要事先了解如何与 RESTful 服务交互。这个约束被称为 Hypermedia as the Engine of Application State ( HATEOAS)。

Client-Server

REST 采用的客户端-服务器模型能够将客户端关注点(例如用户交互 )或用户状态管理与服务器关注点(例如数据存储)分离和可扩展性。

这种解耦确保了,只要提供一个约定的接口,客户端和服务器的开发就可以独立完成。它还有助于降低复杂性并提高性能调整的有效性。

Stateless

REST 提倡无状态。没有客户端状态存储在服务器上。执行 操作所需的所有信息都包含在请求中(作为 URL、请求正文或 HTTP 标头的一部分)。

Cacheable

RESTful Web 服务必须 提供缓存功能。服务器可以指示缓存响应的方式和时间。客户端可以使用缓存的响应而不是联系服务器。

Tip

该原则对于可扩展性具有显着优势。缓存技术将在第 6 章中讨论,性能

由于 REST 通常利用 HTTP,因此它继承了 HTTP 提供的所有缓存属性。

Layered system

鉴于客户端和服务器之间的通信方式,客户端不知道他们正在与哪个特定服务器进行交互。此属性允许引入中间 服务器,例如,可以处理安全性或提供负载平衡功能。这些架构概念在第 10 章扩展 RESTful Web 服务中有更详细的讨论

Code on demand

尽管它是 REST 架构的一部分,但该主体是可选的。服务器可以通过传输可执行代码来临时扩展客户端的 功能。例如,可以将 JavaScript 提供给基于 Web 的客户端以自定义功能。

对于一个被认为是 RESTful 的服务,它应该遵守前面的原则。

The Spring Framework and REST


假设读者熟悉Spring Framework(简称Spring 从这里开始)。因此,在本节中,我们将 关注使用 Spring 构建 RESTful Web 服务的特殊性。

由于 REST 依赖于 URI,因此 Spring Web MVC 框架 提供了所有必要的工具用于构建 RESTful 端点。注解,例如 org.springframework.web.bind.annotation.RequestMappingorg.springframework.web.bind.annotation.RequestParam 用于映射 URL 和参数是创建此类端点的基础。 第 3 章第一个端点,将讨论这些注释并提供代码示例来说明它们的使用。

介绍完技术背景后,现在让我们来看一个这样的 RESTful 服务。在本书中,我们将构建一个示例 Web 服务来帮助管理酒店和 B&B。

Our RESTful web service


酒店业中使用的一个常见的软件是物业管理系统(细心的读者会注意到这些系统的不幸缩写)。它允许自动化酒店和 B&B 的运营。出于本书的目的,我们将使用 Spring 构建这样一个系统。该系统的每个组件都将公开一个 RESTful API 将被使用通过一个简单的网络界面。

Tip

设计有效的应用程序编程接口是一个值得单独讨论的话题。详细讨论这些问题超出了本书的范围。在设计 API 时应牢记的主要特征是:易用性、一致性、尽可能少地公开、可扩展性和前向兼容性。

Architecture

我们的财产管理系统将由四个组成部分组成,如图所示下图:

读书笔记《building-a-restful-web-service-with-spring》以下是一些基本知识

四个组件解释如下:

  • Inventory Service:这个组件提供管理和描述房间的必要功能和房型。

  • Availability Service:该组件让用户可以查看特定的可用房间日期。

  • Booking Service:这个 组件将负责接受预订。它将依赖库存服务和可用性服务组件来验证预订。

  • 计费服务:一旦进行预订,此组件将提供生成发票的能力。

Data model

在本节中,我们将查看 支持我们的 web 的数据模型服务。以下实体关系图提供了此模型的概述:

读书笔记《building-a-restful-web-service-with-spring》以下是一些基本知识

构成我们模型的实体如下:

  • Room:这个对象代表我们酒店的实体房间 .房间有名称和描述以及照片。

  • RoomCategory:每个房间 属于一个类别(例如双人房)。类别提供描述,并链接到定价模型。

  • Pricing:这个对象封装了房间的定价方式(例如,固定价格,或基于客人数量的浮动价格)。

  • Booking:房间的预订以预订为模型。预订将记录为客人预订的房间、日期和联系方式。

  • 发票:这会在预订时向 客人提供发票。它们包含有关预订的相关信息以及要结算的金额。

数据访问层将使用 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,因此无需特定设置即可将其用作我们的嵌入式数据库。

Tip

虽然嵌入式数据库非常适合开发,但它不适合生产部署。

Summary


现在我们已经了解了本书将涵盖的主题,以及我们的 RESTful Web 服务将做什么,让我们讨论如何构建它。

在下一章中,我们将看到一些可用于帮助我们创建示例 Web 服务的工具的描述。