Ограничения API остальных за исключением пейджинга - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть служба REST, которую я хотел бы ограничить использованием клиентов. API выглядит следующим образом.

/api/accounts/search/{page}/{page_size}

Поскольку запись может возвращать большой набор записей, я использую пейджинг, как описано в примере выше, используя {page} и {page_size}

I'm собираюсь использовать таблицу для отслеживания сеанса пользователя, которая будет содержать следующие столбцы.

* Client IP
* Date Created
* Any Other Table To Use If Required

Правило, которое я хочу использовать, состоит в том, чтобы запретить слишком много запросов с одного IP-адреса следующим образом:

1. New Search Request 1 per minute
2. Except if from part of a paging result set from the result.  Ex page 2, 3, 4, etc. I don't want the rule for #1 to exist here.
4. Disallow making a new request while they are pulling data down from #2  ( I want to avoid someone from scraping the information). 

Шаги № 2 и № 3, где я не уверен, как логически сделать или информацию, чтобы отслеживать, чтобы выполнить sh это. Из-за серверных ограничений я стараюсь не допустить, чтобы ресурсы моего сервера были исчерпаны кем-то, кто постоянно проверяет наши данные.

Я ищу советы или идеи о том, как лучше всего выполнить sh это и будет ценить несколько советов?

1 Ответ

0 голосов
/ 08 апреля 2020

Вместо номеров страниц вы можете рассмотреть ссылку next. Это общий шаблон, который используется многими различными API. Вы можете встроить его в свои JSON ответы, HTTP-заголовок Link или использовать стандартный гипермедиа JSON формат, такой как HAL, Siren или др.

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

...