2014-01-23 14 views
2

Как я могу показать разбиение на страницы для REST API с использованием формата HAL, следует ли просто обернуть все в другом объекте с форматированием HAL с метаданными разбиения на страницы или?Как показать REST API HAL формат pagination

Есть ли предлагаемый формат разбиения на страницы в формате 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" 
} 

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

ответ

2

Используйте ссылки с отн = "следующий" и отн = "предыдущий"

+0

Как насчет общего количества записей? Должен ли я помещать его только в _links обернутого объекта или мне не нужен обернутый объект? – khorvat

+1

@khorvat Не уверен, что вы подразумеваете под «обернутым объектом», но ваш пример выглядит хорошо для меня. Вероятно, необходимо добавить ссылку на объект _links в объекте корневого ресурса и в ваших встроенных ресурсах. Также массив следует называть «item» not «items». Имя представляет отношение ссылки к встроенным ресурсам в массиве. «item» - стандартизованное отношение ссылок, зарегистрированное в IANA. –

+0

ну, я новичок в HAL, поэтому я все еще все выясняю. Обернутым объектом я просто имел в виду объект верхнего уровня json, содержащий __embedded_, _item_ & __links_ ... У меня есть я и несколько других ссылок в моем реальном представлении HAL, поэтому я думаю, что все объяснено. – khorvat

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

+0

Если вы найдете что-нибудь интересное в общем счете, дайте мне знать. – khorvat

0

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

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

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

+0

Добро пожаловать в Stackoverflow. Просьба уточнить, как этот пост помогает решить проблему, с которой сталкивается ассер. В случае сомнений и запросов рекомендуется использовать комментарии, как только вы заработаете достаточную репутацию. Вы всегда можете прокомментировать свои собственные сообщения. – Daenarys

Смежные вопросы