HATEOAS有多个页面

时间:2014-05-29 02:50:08

标签: hateoas

是否有使用HATEOAS定义链接顺序列表的规则?

可以轻松地将自我,下一个和上一个链接添加到基于HATEOAS的响应中。以下是回复示例:

{ 
  links : [{
            rel : "next",
            href : "http://localhost:8080/persons?page=1&size=20"
          }], 
  content : [{
     id: "",
     name: "",
     lastname: "",
     age: 0
  }],
  pageMetadata : { 
    size : 20, 
    totalElements : 30, 
    totalPages : 2, 
    number : 0
  } 
};

因此,对下一个和上一个链接的分页并不困难,但我无法弄清楚如何直接访问例如第10页,例如使用select元素(让我们假设有超过10页)。我应该将所有链接添加到响应中,例如page1,page2,page3等吗?当然我知道请求的格式,所以我可以创建适当的查询,但这似乎有点错,因为整点似乎并不依赖于服务的实际链接。我不是这个问题的专家,我在这个网站或谷歌找不到答案。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

常见的解决方案是使用URI templates。具体而言,关于Form-Style Query Expansion的第3.2.8节。

假设pagesize都是可选的,您可以将链接URI模板构建为localhost:8080/persons{?page,size}

URI模板没有定义哪些值可以接受;没有将pagesize限制为数值的机制。因此,除了现有的next / prev链接之外,您还应该包含此模板。我不确定哪种链接关系最能描述这样的资源,但“收集”似乎并不太遥远。

为了使用URI模板,您需要一个库,无论哪种语言都会生成/使用模板。快速搜索以各种语言生成list of libraries,您可能会觉得有用。

最后,根据您的超媒体格式,您可能需要指定模板化的URI。例如,HAL + JSON使用布尔templated属性。

{
    "_links": {
        "collection": {
            "href":      "/persons{?page,size}",
            "templated": true
        }
    }
}