使用 HATEOAS 提高 RESTful API 接口的可用性

阅读时长 6 分钟读完

RESTful API 是现代应用程序开发的一种标准接口设计方式,其核心是将多个独立的资源以统一的 URL 统一起来,并提供 GET、POST、PUT、DELETE 等方法进行操作。RESTful API 的一个重要特点是,它可以通过使用超媒体(HATEOAS)来提高 API 的可用性,本文将介绍如何使用 HATEOAS 来构建更好的 RESTful API。

HATEOAS 的概念

HATEOAS (Hypermedia as the Engine of Application State) 是 RESTful API 设计中实现可扩展性和可用性的一种方式。它允许 API 的客户端在与服务器交互时能够发现可以执行的操作,而无需硬编码特定的 URL。 HATEOAS 通过在 API 中添加超媒体来实现,这些超媒体包含了当前资源的相关链接,以及执行其他相关操作的链接(如下一页、前一页等)。

HATEOAS 的使用

下面我们以一个简单的Todo应用为例,来说明如何在API中使用HATEOAS,首先我们需要将我们的Todo资源设计成一个RESTful API,如下所示:

然后,我们需要在返回响应中添加超媒体。例如,在返回单个 Todo 的响应中,我们可以添加一个包含所有 Todo 的链接列表,并添加“上一页”、“下一页”等操作:

-- -------------------- ---- -------
-
  ----- --
  -------- ---- -----------
  ------------ ------
  --------- -
    ------- - ------- ---------- --
    ------- - ------- -------- --
    --------- - ------- ----------- --------- ----- --
    --------- - ------- ----------- --------- -------- --
    ------- - ------- ----------- --------- ----- --
    ------- - ------- ----------- --------- ----- -
  -
-

在这个响应中,我们添加了一个 _links 属性,它包含了 selflistupdatedeleteprevnext 链接。这些链接包含了操作的 URL,以及运行该操作的方法类型。客户端可以使用这些链接来发现可以执行的操作。

我们还可以在其他响应中添加其他链接。例如,在返回所有 Todo 的响应中,我们可以添加一个链接,允许客户端创建新的 Todo:

-- -------------------- ---- -------
-
  --------- -
    ------- - ------- -------- --
    --------- - ------- --------- --------- ------ -
  --
  ------------ -
    -------- -
      - ----- -- -------- ---- ----------- ------------ ----- --
      - ----- -- -------- ----- --- ------- ------------ ---- --
      - ----- -- -------- --- --------- ------------ ----- -
    -
  -
-

在这个响应中,我们添加了一个名为 create 的链接,它允许客户端创建新的 Todo。

如何实现 HATEOAS

实现一个 HATEOAS 的 RESTful API 并不难。首先,需要确定我们需要提供哪些链接。通常,以下链接是必要的:

  • self - 指向当前资源的 URL
  • list - 指向包含当前资源的列表的 URL
  • create - 指向创建新资源的 URL
  • update - 指向更新当前资源的 URL
  • delete - 指向删除当前资源的 URL
  • prev - 指向上一页
  • next - 指向下一页

然后,我们需要在服务器中实现这些链接。在使用 Express.js 的 Node.js 服务器中,可以通过以下方式实现 _links 属性:

-- -------------------- ---- -------
----- ------------------ - ---------- -- -
  --------------- - -
    ----- - ----- --------------------------- --
    ----- - ----- ------------ --
    ------- - ----- ------------- ------- ------ --
    ------- - ----- ---------------------------- ------- ----- --
    ------- - ----- ---------------------------- ------- -------- -
  --

  ------ ---------
--

-- ------- -----
------------------------- ----- ---- -- -
  ----- ---- - ---------------------------
  -----------------------------------
---

上面的代码在返回 Todo 数据之前,调用 addLinksToResource 函数为其添加 _links 属性。在客户端上,我们可以将响应数据存储在变量中,并在需要时使用链接属性:

这里的 fetch 可以是使用 XMLHttpRequestaxios 或其他网络库发起请求。

结论

使用 HATEOAS 构建 RESTful API 可以使客户端更容易使用 API,并提高可扩展性。我们只需要在响应中添加链接,客户端就可以轻松地发现可以执行的操作。在实现时,我们需要确定哪些链接是必要的,然后在服务器中实现这些链接。通过使用 HATEOAS,我们可以创造更好的 Web API,提高程序的巨大可用性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674bc579d657e1f70dbd885b

纠错
反馈