首页 > 解决方案 > 为什么要向 REST API 的响应添加链接?

问题描述

为什么开发人员要在 REST API 的响应中添加链接?例如,在本教程中的分页响应中。

{
    "_links": {
        "self": {
            "href": "http://example.org/api/user?page=3"
        },
        "first": {
            "href": "http://example.org/api/user"
        },
        "prev": {
            "href": "http://example.org/api/user?page=2"
        },
        "next": {
            "href": "http://example.org/api/user?page=4"
        },
        "last": {
            "href": "http://example.org/api/user?page=133"
        }
    }
    "count": 3,
    "total": 498,
    "_embedded": {
        ...
    }
}

在前端生成这样的链接非常容易。

标签: rest

解决方案


对此有多种说法。因此,在我的回答中,我戴上了想要添加这些链接的人的帽子。这里有几个原因:

  1. 逻辑较少的客户端有点好。您可能有多个客户端,因此您不必重新实现相同的逻辑。
  2. 它允许服务器完全改变逻辑而无需更新客户端。例如,现在您用于?page=x进入下一页,但这种特定的分页方法可能会给您带来某些规模/某些数据集的问题。例如,如果您想更改为?offset=x客户端将透明地升级。
  3. 如果next链接不存在,它也很容易告诉客户端没有下一页。
  4. 这与前面的原因有些重叠,但是如果您正在创建一个由多个服务器实现的 API 标准,您不会强制服务器实现您的特定分页策略。通过使用链接,您基本上可以为 API 的其他实现打开大门,以选择更适合其基础架构的不同分页策略。
  5. 这是一个“统一的界面”。API 中的所有内容都是资源(包括“下一页”),这意味着所有内容的行为通常都相同。不仅页面应该这样工作,其他类型的关系也应该这样工作。例如,也许您的“用户”是“组”的一部分。不要指定“groupId”,指定组链接。

最后,您可以轻松地为此生成简单的通用 HTML 接口,这可能对您的开发人员有用。那里有很多 HAL 浏览器。


推荐阅读