Ограничение скорости запросов REST на Heroku

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

Что нужно сделать в этом случае, чтобы остановить злоупотребление API?

Ответ 1

Я думаю, что вы ищете драгоценный камень rack-throttle или rack-attack. Оба из них позволяют дросселировать, а драгоценный камень rack-attack также позволяет вам отключать людей в течение определенного периода времени и блокировать определенные IP-адреса, если они являются кратковременными нарушителями или по какой-либо другой причине, по которой вы хотели бы заблокировать запросчиков.

Ответ 2

Подумайте о том, чтобы положить cookie на клиент или, еще лучше, поле в учетной записи пользователя, которое записывает последний раз, когда они сделали запрос (многие плагины для аутентификации делают это уже), и просто отклоняют/задерживают свой запрос, если он более поздний чем, скажем, 5 секунд назад (20 запросов/сек.).

ПРИМЕЧАНИЕ. Если использование однопоточного веб-сервера (например, Mongrel) с явным задержкой, а не отклонения, может задержать другой ожидающий запрос на этот Mongrel. Другими словами, это повлияет на ваших других пользователей. Возможно, небольшой ответ javascript/ajax, чтобы уведомить пользователя о том, что они ограничены в скорости, если это уместно. Подумайте, как StackOverflow мешает вам делать определенные вещи слишком часто на сайте.