Какой лучший метод RESTful для возврата общего количества элементов в объекте? - PullRequest
118 голосов
/ 15 сентября 2010

Я разрабатываю службу REST API для большого сайта социальной сети, в котором я участвую. Пока что он работает отлично.Я могу выдавать запросы GET, POST, PUT и DELETE на URL-адреса объектов и влиять на мои данные.Тем не менее, эти данные разбиты на страницы (ограничено 30 результатами за раз).

Однако, как лучше всего получить RESTful-общее число, скажем, членов, через мой API?

В настоящее время я отправляю запросы к структуре URL, например:

  • / api / members - возвращает список участников (30 одновременно, как указано выше)
  • / api / members / 1 - Влияет на одного члена в зависимости от используемого метода запроса

Мой вопрос: как мне тогда использовать аналогичную структуру URL дляполучить общее количество участников в моей заявке?Очевидно, что запрос только поля id (аналогично API Graph в Facebook) и подсчет результатов будут неэффективными, поскольку будет возвращен только фрагмент из 30 результатов.

Ответы [ 11 ]

0 голосов
/ 18 июля 2014

При запросе разбитых на страницы данных вы знаете (по явному значению параметра размера страницы или значению размера страницы по умолчанию) размер страницы, чтобы вы знали, получили ли вы все данные в ответ или нет. Когда в ответе меньше данных, чем размер страницы, вы получаете целые данные. Когда возвращается полная страница, вам нужно снова запросить другую страницу.

Я предпочитаю иметь отдельную конечную точку для подсчета (или ту же конечную точку с параметром countOnly). Потому что вы могли бы подготовить конечного пользователя к длительному / длительному процессу, показав правильно инициированный индикатор выполнения.

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

<data>
  <originalRequest>
    <filter/>
    <filter/>
  </originalReqeust>
  <totalRecordCount/>
  <pageSize/>
  <offset/>
  <list>
     <item/>
     <item/>
  </list>
</data>

Моя связь, предпочитаю параметр countOnly существующей конечной точке. Таким образом, если указано, ответ содержит только метаданные.

конечная точка? Фильтр = значение

<data>
  <count/>
  <list>
    <item/>
    ...
  </list>
</data>

конечная точка? Фильтр = значение & countOnly = истина

<data>
  <count/>
  <!-- empty list -->
  <list/>
</data>
...