Как выставить разбиение на страницы в формате HAL REST API

Как мне выставить разбивку на страницы для REST API с использованием формата HAL, должен ли я просто обернуть все в другой форматированный объект 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"
}

Это хорошая практика или нет?


person khorvat    schedule 23.01.2014    source источник


Ответы (3)


Используйте ссылки с rel="next" и rel="previous"

person Darrel Miller    schedule 23.01.2014
comment
А как насчет общего количества записей? Должен ли я помещать его только в _links завернутого объекта или мне не нужен завернутый объект? - person khorvat; 23.01.2014
comment
@khorvat Не уверен, что вы имеете в виду под обернутым объектом, но ваш пример мне нравится. Вероятно, следует добавить собственную ссылку на объект _links в объекте корневого ресурса и во встроенных ресурсах. Также массив следует называть «элемент», а не «элемент». Имя представляет собой отношение ссылки к внедренным ресурсам в массиве. «Элемент» — это стандартизированное отношение ссылки, зарегистрированное в IANA. - person Darrel Miller; 23.01.2014
comment
ну, я новичок в HAL, поэтому я все еще во всем разбираюсь. Под обернутым объектом я просто имел в виду объект верхнего уровня json, содержащий _embedded, item и _links... У меня есть self и несколько других ссылок в мое реальное представление о HAL, поэтому я думаю, что все объяснено. - person khorvat; 23.01.2014

Кстати, у вас есть пример в правильном 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"... я также выясняю, как лучше всего включить атрибут totalCount в формате HAL.

person Rafael    schedule 02.04.2015
comment
Если вы обнаружите что-нибудь интересное об общем количестве, дайте мне знать. - person khorvat; 02.04.2015
comment
_totalCount подходит как прямое свойство коллекции. Я бы, вероятно, выбрал более предсказуемое и легко запоминающееся имя, например count (бонусный балл, который может иметь отношение к большинству разработчиков, знакомых с SQL). - person Michael Ekoka; 21.03.2019

_totalcount может быть проблематично. Является ли это неотъемлемым свойством ресурса, который вы возвращаете? Скорее всего нет.

Если оно у вас есть, то вы будете вынуждены указывать это значение каждый раз для каждой страницы ресурса. Если общая коллекция очень велика, потребуется где-то хранить счетчик, чтобы удовлетворить требованиям API. Во многих случаях подсчет может быть труднее получить. Например, если вы реализуете на основе других сервисов, предоставляющих токен продолжения, заполнение _totalcount станет затруднительным. Если у вас есть таблица SQL, ее может быть довольно легко получить, но это также обходится недешево.

Это действительно ценно для клиента или пользовательского интерфейса? Я бы по возможности избегал.

person Ganesan    schedule 25.01.2016
comment
Добро пожаловать в Stackoverflow. Пожалуйста, уточните, как этот пост помогает решить проблему, с которой столкнулся спрашивающий. В случае сомнений и вопросов рекомендуется использовать комментарии, как только вы заработаете достаточно репутации. Вы всегда можете комментировать свои записи. - person Nagama Inamdar; 25.01.2016