REST api pagination: сделать размер страницы параметром (настраивается снаружи) - PullRequest
7 голосов
/ 06 января 2010

у нас есть поиск / список ресурсов:

<a href="http://xxxx/users/?page=1" rel="noreferrer">http://xxxx/users/?page=1</a>

Внутренне размер страницы является статическим и возвращает 20 элементов. Пользователь может двигаться вперед, увеличив номер страницы. Но чтобы быть более гибким, мы теперь думаем также об увеличении размера страницы:

<a href="http://xxxx/users/?page=1&size=20" rel="noreferrer">http://xxxx/users/?page=1&size=20</a>

Как таковой, он является гибким, так как теперь клиент может выбирать сетевые вызовы в зависимости от размера ответа при поиске. Конечно, у этого есть недостаток, заключающийся в том, что сервер может быть сильно ударен либо случайно, либо намеренно: <a href="http://xxxx/users/?page=1&size=1000000" rel="noreferrer">http://xxxx/users/?page=1&size=1000000</a>

Для надежности решение может состоять в том, чтобы настроить верхний предел размера страницы (например, 100), а при его превышении либо представить ответ об ошибке, либо перенаправить HTTP на URL с максимально возможным параметром размера страницы.

Что вы думаете?

Ответы [ 3 ]

10 голосов
/ 06 января 2010

Лично я просто задокументировал бы максимальный размер страницы, и все, что больше этого, просто рассматривается как максимальный.

3 голосов
/ 06 января 2010

Управление доступом к ресурсам всегда хорошая идея, также известная как защита внешних интерфейсов : другими словами, установите разумное ограничение.

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

Убедитесь, что параметры хорошо задокументированы в любом случае.

1 голос
/ 07 января 2010

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

Вопрос: Когда я использую GET, URI http://xxx/user?page=1 содержит ли ответ ссылку на следующую страницу? Предыдущая страница? Если нет, то это не совсем RESTful.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...