第 45 章 RESTful Web 服务简介


摘要

Representational State Transfer (REST)是一个软件架构,它围绕通过 HTTP 传输数据的数据中心,仅使用四个基本 HTTP 动词。它还使用任何额外的打包程序,如 SOAP 信封以及使用任何状态数据。

概述

Representational State Transfer (REST)是一个架构样式,首先在名为 Roy Fielding 的研究人员中描述。在 RESTful 系统中,服务器使用 URI 来公开资源,客户端使用四个 HTTP 动词来访问这些资源。当客户端收到它们处于状态的资源表示时。当访问新资源时,通常遵循链接、更改或转换其状态。为了工作,REST 假定资源能够使用普遍标准 grammar 表示。

全球 Web 是设计于 REST 原则的系统的最广泛示例。Web 浏览器充当访问 Web 服务器上托管的资源的客户端。资源使用 HTML 或 XML 图表来表示,所有 Web 浏览器都可以使用它们。浏览器还可以轻松遵循指向新资源的链接。

RESTful 系统的优点在于它们具有高度可扩展且高度灵活性。由于资源使用四个 HTTP 动词访问和操作,所以这些资源使用 URI 来公开,并且资源使用标准的 grammars 表示,所以客户端不会受服务器更改的影响。此外,RESTful 系统还可以充分利用 HTTP 的可扩展性功能,如缓存和代理。

基本 REST 原则

RESTful 架构遵循以下基本原则:

  • 应用程序状态和功能被分成多个资源。
  • 资源可以使用标准 URI 来寻址,它们可用作超媒体链接。
  • 所有资源仅使用四个 HTTP 动词。

    • DELETE
    • GET
    • POST
    • PUT
  • 所有资源使用 HTTP 支持的 MIME 类型提供信息。
  • 协议是无状态的。
  • 响应是可缓存的。
  • 协议是层次的。

Resources

资源是 REST 的核心。资源是可以使用 URI 解决的信息源。在 Web 早期的早期,资源是大型静态文档。在现代 Web 中,资源可以是任何信息来源。例如,如果可通过 URI 访问它,Web 服务可以是资源。

RESTful 端点交换它们地址的资源的 表示。表示是一个文档,其中包含资源提供的数据。例如,提供客户记录的 Web 服务的方法将是资源,在服务和消费者之间交换的客户记录副本是资源的表示。

REST 最佳实践

在设计 RESTful Web 服务时,请注意以下几点:

  • 为您要公开的每个资源提供不同的 URI。

    例如,如果您要构建处理驱动记录的系统,每个记录都应该有一个唯一的 URI。如果系统也提供了关于 parking violations 和 speeding fines 的信息,每种类型的资源还应具有唯一的基础。例如,可以通过 /speedingfines/driverID 和 parking violations 访问速度较差,可以通过 /parkingfines/driverID 访问。

  • 在 URI 中使用 nouns。

    使用 nounss 突出显示资源是什么,而不是操作。诸如 /ordering 等 URI 代表一个操作,而 /orders 则代表一个操作。

  • 映射到 GET 的方法不应更改任何数据。
  • 在您的响应中使用链接。

    在响应中放入其他资源的链接后,客户端可以更轻松地遵循数据链。例如,如果您的服务返回资源集合,客户端可以使用提供的链接访问每个独立资源。如果没有包括链接,客户端需要具有额外的逻辑才能遵循到特定节点的链。

  • 使您的服务无状态。

    要求客户端或服务维护状态信息,强制两者间的紧密耦合。紧密耦合使升级和迁移变得更加困难。维护状态也可以使从通信错误恢复变得更加困难。

设计 RESTful Web 服务

无论您用来实现 RESTful Web 服务的框架是什么,都应遵循几个步骤:

  1. 定义服务将公开的资源。

    通常,服务会公开一个或多个以树形组织的资源。例如,驱动记录服务可以分为三个资源:

    • /license/driverID
    • /license/driverID/speedingfines
    • /license/driverID/parkingfines
  2. 定义您要对每个资源执行的操作。

    例如,您可能希望更新不同地址或从驱动程序的记录中删除解析票据。

  3. 将操作映射到适当的 HTTP 动词。

定义该服务后,您可以使用 Apache CXF 实现该服务。

使用 Apache CXF 实施 REST

Apache CXF 为 RESTFul Web 服务(JAX-RS)提供了 Java API实施。JAX-RS 提供了使用注释将 POJO 映射到资源的标准化方法。

从抽象服务定义移动到使用 JAX-RS 实施的 RESTful Web 服务时,您需要执行以下操作:

  1. 为代表服务资源树顶部的资源创建根资源类。

    请参阅 第 46.3 节 “根资源类”

  2. 将服务的其他资源映射到子资源。

    请参阅 第 46.5 节 “使用子资源”

  3. 创建方法来实现每个资源所使用的每个 HTTP 动词。

    请参阅 第 46.4 节 “使用资源方法”

注意

Apache CXF 继续支持旧的 HTTP 绑定,将 Java 接口映射到 RESTful Web 服务。HTTP 绑定提供基本功能,并有许多限制。建议开发人员更新其应用以使用 JAX-RS。

数据绑定

默认情况下,Apache CXF 将 Java 架构用于 XML Binding (JAXB)对象,将资源及其表示映射到 Java 对象。提供 Java 对象和 XML 元素之间的干净定义映射。

Apache CXF JAX-RS 实施还支持使用 JavaScript 对象表示法 (JSON)交换数据。JSON 是一种流行数据格式,供 iwl 开发人员使用。JSON 和 JAXB 之间的数据处理由 Apache CXF 运行时处理。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.