RESTful API 中的 HATEOAS 原则详解

RESTful API 是现代 Web API 的一种设计风格,其以资源为核心,使用统一的接口进行交互,被广泛应用于移动应用、Web 应用、IoT 设备等场景。而 HATEOAS 原则则是 RESTful API 设计中的一个关键概念,它为 API 的自我描述性和客户端驱动性提供了支持,从而提高了系统的可伸缩性、可维护性和可重用性。

什么是 HATEOAS?

HATEOAS 是 Hypermedia as the Engine of Application State 的缩写,中文意思为“超媒体作为应用状态的引擎”。它是 Roy Fielding 在他的博士论文中提出的一个 RESTful API 设计原则,用于描述一个良好的 RESTful API 应该如何自我描述和交互。

简而言之,HATEOAS 原则要求 API 的响应应该不仅包含请求的信息,还应该包含下一步可能的操作或转移。通过这种方式,客户端可以使用 API 的自我描述性完成对 API 的探索和使用。

HATEOAS 的优势

HATEOAS 原则对于 RESTful API 的设计提供了以下几个优势:

  1. 新增/删除资源对客户端的影响降到最低,从而提高了可伸缩性。 因为客户端只需要关注当前资源状态和可用的操作,而不需要事先知道整个 API 的结构,所以新增/删除资源对客户端的影响较小,而且 API 本身也更加灵活。

  2. 客户端可以使用 API 的自我描述性,从而提高了可维护性。 当 API 发生变化时,客户端可以使用 API 的自我描述性检测 API 变化并相应调整之前的操作。此外,通过 HATEOAS 原则,API 可以在响应中提供足够的信息和链接,使客户端了解操作和资源的含义,从而降低了文档和注释带来的维护负担。

  3. 支持多个客户端使用同一个 API,从而提高了可重用性。 客户端可以根据 API 的自我描述性自动执行下一步操作,从而避免了具体实现的耦合,实现了 API 系统与客户端的解耦。

HATEOAS 的应用

要使用 HATEOAS 原则,我们可以在响应中使用链接,将当前资源和可用的操作联系起来。一般有两种方式实现。

HAL(Hypertext Application Language)

HAL 是一个简单的媒体类型,可以使用 JSON 或者 XML 表示一个资源以及它与其他资源之间的关系。HAL 将资源和链接作为 JSON 对象返回,如下所示:

{
    "id": 1234,
    "name": "Lucy",
    "_links": {
        "self": { "href": "/people/1234" },
        "friends": { "href": "/people/1234/friends" }
    }
}

其中,_links 对象包含了当前资源与其他资源之间的链接信息,self 是一个特殊的链接,代表当前资源的链接。

HTML

HTML 是一种常规的媒体类型,也可以用来实现 HATEOAS。HTML 中的链接和表单可以表示一组跟当前资源相关的操作。下面是一个使用 HTML 表示资源状态和操作的例子:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Person</title>
</head>
<body>
    <h1>Person: Lucy</h1>
    <p>Id: 1234</p>
    <p>
        <a href="/people/1234">Self</a>
        <a href="/people/1234/friends">Friends</a>
    </p>
</body>
</html>

其中,<a> 标签表示了当前资源和其他资源之间的链接,用户可以根据链接访问到对应的资源和操作。

总结

HATEOAS 原则是 RESTful API 设计中的一个核心概念,它要求 API 的响应中包含资源和操作之间的链接,使客户端可以自动发现和使用资源。

使用 HATEOAS 原则可以提高 API 的可伸缩性、可维护性和可重用性,是一个值得推广的设计原则。同时,使用 HAL 或者 HTML 表达资源和链接是一种常见的方式,推荐在 API 设计中使用。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659f5458add4f0e0ff7fd1d4


纠错反馈