0

这听起来像一个菜鸟问题,但我想知道用 HAL 格式呈现分页资源的最佳方式是什么?现在我正在使用 Spring HATEOAS API 将Pageobject 转换为 resource PagedResourcesAssembler#toResource(Page<T>, ResourceAssembler<T,R>)。这将产生以下输出:

{
"_links": {
    "self": {
        "href": "http://example.org/api/user?page=3"
    },
    …
}
"count": 3,
"total": 498,
"_embedded": {
    "users": [
        {
            "_links": {
                "self": {
                    "href": "http://example.org/api/user/mwop"
                }
            },
            "id": "mwop",
            "name": "Matthew Weier O'Phinney"
        }
    ]
}

}

一切正常,但唯一的问题是返回的集合在_embedded字段下并且有类名,所以客户端也必须知道这个类名,对吗?content以非 HAL 格式返回集合会更好吗?如果是,我应该如何使用 Spring HATEOAS 实现它?

4

1 回答 1

2

这不是问题,这就是HAL 规范_embedded中定义的方式。

users不是一个类,它是一个链接关系,它允许客户端真正找到它首先要求的集合(例如,使用 JSONPath 表达式)。这根本不是突然出现的东西,但通常是相同的链接关系,客户端用来首先找到该资源。

假设一个 API 根暴露了这个文档:

{
  "_links": {
    "users": {
      "href": "…&quot;
    },
    …
  }
}
  

看到这一点,客户端必须知道的语义users才能找到它想要遵循的链接。在您的情况下users,基本上是指向支持分页的集合资源。

因此,如果客户端点击名为 的链接,则它可以通过结合有关媒体类型 (HAL, ) 和服务的应用程序级语义 ( ) 的知识,在 HAL 响应中users找到它正在寻找的实际内容。_embedded.users_embeddedusers

于 2016-01-12T05:42:46.390 回答