使用HAL呈现分页资源的正确方法是什么?

时间:2016-01-11 22:32:22

标签: hateoas spring-hateoas hal-json

这听起来像是一个新手问题,但我想知道用HAL格式呈现分页资源的最佳方法是什么?现在我使用Spring HATEOAS API将Page对象转换为资源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字段下并且有类名,所以客户端必须知道这个类名吗?如果以非HAL格式返回content下的集合会更好吗?如果是,我应该如何使用Spring HATEOAS实现它?

1 个答案:

答案 0 :(得分:2)

这不是问题,这是HAL specification_embedded定义的方式。

users不是一个类,它是一个链接关系,允许客户端首先实际找到它所要求的集合(例如,使用JSONPath表达式)。这根本不是什么东西,但通常是相同的链接关系,客户端用于首先找到该资源。

假设API根公开此文档:

{
  "_links": {
    "users": {
      "href": "…"
    },
    …
  }
}

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

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

相关问题