HATEOAS:关于 REST 约束的信息

HATEOAS:首字母缩略词是什么意思?

Representational State Transfer - 俗称 REST - 是现代 Web 开发最重要的编程范式之一。 Roy Fielding 在他的 2000论文中发明的架构风格,其主要目的是尽可能优化地调整 Web 应用程序以适应现代 Web 的要求。由于 REST 在最近获得了显着的流行度和重要性,许多 Web 项目运营商越来越多地尝试尽其所能实现这一概念。然而,这些努力的结果通常不是“RESTful”或“REST-compliant”,因为某些原则和属性(例如 HATEOAS)尚未得到充分实施。

什么是HATEOAS?

HATEOAS 是一个首字母缩写词,代表 'Hypermedia as the Engine of Application State '。这个术语由 Fielding 作为其 REST 定义的一部分引入,描述了关键的 REST 属性之一:由于架构风格应该提供通用接口,HATEOAS 要求 REST 客户端仅在 Web 应用程序中移动* 通过遵循超媒体格式的 URIs*(统一资源标识符)。如果实现了这一原则,除了对超媒体的基本了解之外,客户端不需要任何进一步的信息,以便能够与应用程序或服务器进行交互。

提供了各个 URI......

href 和 src 属性形式的* ,用于 HTML 文档或片段

  • 使用各自客户端自动识别的 JSON 或 XML 属性/元素

通过实现 HATEOAS 原则,**一个 REST 服务的接口可以随时适配。**这是该架构与其他应用程序结构相比的重要优势,例如基于 SOAP(简单对象访问协议)的应用程序结构.

HATEOAS 和 REST:超媒体原理

为了对 HATEOAS 及其对 REST 应用程序的意义进行分类,您必须看一下整体构造。在他的概念中,Fielding 总共描述了五个基本原则,为了使服务符合 REST 标准,必须满足这些原则。

为了保护您的隐私,视频在您点击之前不会加载。

在任何情况下,都必须有一个客户端-服务器结构,它还可以在服务器和客户端之间实现无状态通信(即在不参考先前查询的情况下处理请求)。此外,服务应具有多层结构并利用HTTP缓存使访问客户端尽可能轻松地使用服务。最后,已经提到的实现强制任务的统一接口也是包的一部分。

Fielding 为服务器和客户端之间的连接指定了四个属性:

  • 所有资源的唯一标识:所有资源必须由一个URI(Unique Resource Identifier)标识

  • 可能通过表示与资源交互:如果客户端请求资源,服务器会提供合适的表示/表示形式(例如 HTML、JSON 或 XML),以便客户端能够修改或删除原始资源

  • 自描述消息:服务器和客户端之间交换的每条消息都必须包含理解它所需的所有信息

  • Hypermedia as the Engine of Application State**(HATEOAS)**:毕竟 HATEOAS 原则也是 REST API 的必备组件。基于超媒体的结构简化了客户端对应用程序的访问——访问和导航不需要额外的界面知识

因此,HATEOAS 是 REST API 的基本功能之一,对于任何 REST 服务都是必不可少的。

小费

有关REST的更多信息,请参阅我们关于该主题的基本文章。

HATEOAS 使用网上商店的例子

为了使 HATEOAS 概念更加具体,下一节将使用网上商店为例说明该概念的实现。与 Web 应用程序一样,HATEOAS 通过放置超链接实现。这些两个文档之间的交叉引用或对同一文档中另一个位置的交叉引用在 HTML 代码中标记如下:

<a href="URI">Link-Text</a>

链接媒体,例如文本、图形、音频和视频,被称为超媒体。 Web 应用程序主要是简单的HTML 格式的文本文档,也可以看作是这些应用程序的状态。在 REST 理念的框架内,始终可以使用唯一的 URL 来处理各个文档。如果将概念转移到普通的在线商店,将产生以下结果:

描述状态“shoppingcart”的文档具有永久分配的 URI,例如:'https://example.org/shoppingcart'。在相同的样式中,还有可以放置在购物车中的单个 items 的 URI——例如 'https://example.org/item/1'、'https://example。 org/item/2', 等。另一种可能的状态是 customer account,可以直接从购物车访问,并且可以具有以下 URI:'https://example.org/customer/ 1'。每个单独的文档还包含指向用户下一步可以执行的操作的链接或超链接。

为了与当前场景保持一致,这意味着购物车文档还包含对文章和客户 URI 的交叉引用。反过来,这些可能包含指向制造商或合同文件的更多链接。通过 GET 请求,客户端然后移动通过商店,或者在这种情况下,通过各种超链接通过购物车,如下面的简化图像所示:

HATEOAS 示例:在线商店

网络商店中 HATEOAS 实施的示意图

在 REST 服务的情况下,按照 Fielding 的要求遵循 HATEOAS 原则,用户只需要知道开始 URI 就可以利用开发人员计划的优惠。

HATEOAS REST 应用程序:服务器-客户端通信示例

在上述网络商店结构的基础上,还可以解释客户端和服务器之间可能的通信。客户端应用程序发出以下请求以获得购物车状态的XML 表示:

GET 'https://example.org/shoppingcart' HTTP/1.1
Host: 'https://example.org'
Accept: application/xml

服务器的响应可能如下所示:

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 256

<?xml version="1.0"?>
<shoppingcart>
  <shoppingcart_number>1</shoppingcart_number>
  <link rel="account" href="https://example.org/customer/1" />
  <link rel="item1" href="https://example.org/item/1" />
  <link rel="item2" href="https://example.org/item/2" />
</shoppingcart>
Logo

WordPress社区为您提供专业的建站知识与服务支持,提供一步到位的镜像安装和wordpress主题与插件支持

更多推荐