2009-02-01 2 views
13

Я разрабатываю REST api, для которого требуется подкачка (за x) с сервера.RESTful Design: Paging Collections

Что бы правильный путь к странице через любой коллекции ресурсов:

Вариант 1:

GET /resource/page/<pagenr> 
GET /resource/tags/<tag1>,<tag2>/page/<pagenr> 
GET /resource/search/<query>/page/<pagenr> 

Вариант 2:

GET /resource/?page=<pagenr> 
GET /resource/tags/<tag1>,<tag2>?page=<pagenr> 
GET /resource/search/<query>?page=<pagenr> 

Если 1, то, что я должен делать с GET/ресурс? Перенаправить на/resource/page/0, ответить с некоторой ошибкой или ответом с помощью того же самого, что и/resource/page/0, без перенаправления?

+0

Лично я бы пошел со страницей = . Но я думаю, у вас есть более фундаментальные вопросы, чтобы ответить на ваш дизайн, судя по приведенным выше вариантам. :) –

+0

Вы имеете в виду, потому что я должен использовать пейджинг? –

+0

Возможно, посмотрите http://stackoverflow.com/questions/924472/paging-in-a-rest-collection – zehrer

ответ

4

С моим ограниченным пониманием того, что такое REST, тогда может быть «самым» успокоительным.

GET /resource/?page=<pageenr>&asof=<datetime> 

Поскольку содержание представления никогда не изменится неожиданно, и можно использовать кеширование.

Но для ответа на ваш вопрос, я думаю, что страница параметров является предпочтительным методом.

+1

Не только это, но пейджинг не является частью ресурса. Используете ли вы пейджинг или нет, и в какой форме он не изменяет ресурс, просто так, как вы его просите. То же самое касается порядка сортировки и даже фильтрации. –

+1

@Dave Van den Eynde: Это неправильно. RFC 3986 (URI Generic Syntax) (раздел 3.4): ** «Компонент запроса содержит неиерархические данные, которые ** * вместе с данными в компоненте пути (раздел 3.3), * ** служит для идентификации ресурса ** * в рамках схемы URI и полномочий именования (если есть) * * (мое выделение). Страница второй - это другой ресурс, чем страница 1. Но в любом случае это не имеет отношения к RESTfulness. – mogsie

+0

С помощью этого RFC часть фрагмента URI должна использоваться для подкачки/сортировки. Но я серьезно сомневаюсь, что этот RFC применяется здесь. Вы пробовали это? Я не думаю, что браузеры делают различие между двумя URI, где только фрагмент отличается. Возможно, я должен был сказать это по-другому. Если в REST api «ресурс» действительно то, что идентифицируется PATH, тогда QUERY можно использовать для завершения ресурса с помощью поискового вызова/сортировки. Но что такое «ресурс» для REST, отличается от того, что представляет собой ресурс в контексте URI. –

4

Я бы выбрал вариант (2). Зачем?

  1. После этого вы можете добавить параметр размера страницы в запрос, чтобы клиент мог указать размер страницы.
  2. В случае отсутствия параметра страницы вы можете просто вернуть первую страницу (по умолчанию). Во многих случаях клиенту может понадобиться только первая страница, поэтому он упрощает протокол между клиентом и сервером.
13

Что представляет собой URI, не является самой важной частью. То, о чем вы должны думать, - это то, как оно представлено пользователю. Например, страница должна иметь ссылку на «следующую» страницу и другую ссылку на «предыдущую» страницу (если она есть). Посмотрите на RFC 5005 Feed Paging and Archiving

+0

Почему это проголосовало? Это правильный ответ! – mogsie

+0

Nice link - Я раньше этого не видел. – ladenedge

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