如何公开REST API HAL格式分页

时间:2014-01-23 10:53:08

标签: json rest asp.net-web-api hateoas

我应该如何使用HAL格式公开REST API的分页,我是否应该使用分页元数据将所有内容包装在另一个HAL格式的对象中?或者

REST API HAL格式下是否存在建议的分页格式?

更新

没有分页的示例

[
    {
        "Id": "SomeId",
        "Attribute": 5,
        "_links": {
            "User": { "href": "http://mywebapi/etc", "templated": true }
        },
        "_embedded": { "User": { "Id": "SomeId","_links": {},"_embedded": {}} }
    },
    {
        "Id": "SomeId",
        "Attribute": 5,
        "_links": {
            "User": { "href": "http://mywebapi/etc", "templated": true }
        },
        "_embedded": { "User": { "Id": "SomeId","_links": {},"_embedded": {}} }
    }
]

分页示例

{
    "_embedded": { 
    "items":
    [
        {
            "Id": "SomeId",
            "Attribute": 5,
            "_links": {
                "User": { "href": "http://mywebapi/etc", "templated": true }
            },
            "_embedded": { "User": { "Id": "SomeId","_links": {},"_embedded": {}} }
        },
        {
            "Id": "SomeId",
            "Attribute": 5,
            "_links": {
                "User": { "href": "http://mywebapi/etc", "templated": true }
            },
            "_embedded": { "User": { "Id": "SomeId","_links": {},"_embedded": {}} }
        }
    ]},
    "_links": {
        "next": "next link",
        "previous": "next link"
    },
    "_totalCount": "100"
}

这是一个好的做法吗?

3 个答案:

答案 0 :(得分:4)

顺便提一下,你有一个适当的HAL RFC的例子

https://tools.ietf.org/html/draft-kelly-json-hal-06#section-6

 "_links": {
   "self": { "href": "/orders" },
   "next": { "href": "/orders?page=2" },
   "find": { "href": "/orders{?id}", "templated": true }
 }

我不确定是关于“_totalCount”...我也在找出以HAL格式输入totalCount属性的最佳方法

答案 1 :(得分:2)

使用rel =“next”和rel =“previous”的链接

答案 2 :(得分:1)

DIR可能会有问题。它返回的资源的固有属性是什么?很可能不是。

如果你拥有它,那么你将被迫每次资源的每个页面提供的值。如果总集合非常大,则有必要将计数存储在某个地方以满足API。在许多情况下,计数可能更难获得。例如,如果您基于提供延续令牌的其他服务实施,则填充_totalcount将变得困难。如果你有SQL表,它可能相当容易获得,但也需要付出代价。

它对客户端或UI真的有价值吗?如果可能,我会避免。