Запросы дросселирования к API Ruby on Rails

Попытка Google использовать плагин Rails, который позволит регулировать количество запросов, которые потребляет определенный ресурс. Django Piston имеет для этого открытый код. Есть ли что-то доступное из коробки для Rails или можно ли предположить, что смотреть на то, как Piston делает это и переносить его как плагин Rails - это то, над чем можно работать?

Ответ 2

Rack:: Defense - это промежуточное программное обеспечение стойки для фильтрации и фильтрации запросов. Его легко настроить, имеет небольшой размер и имеет только две зависимости (стойка и redis). Вы можете фильтровать практически по любым критериям: ip, токен api, имя пользователя и т.д.

Вот пример того, как вы будете дросселировать POST-запросы для пути /login с максимальной скоростью 20 запросов в минуту на IP:

Rack::Defense.setup do |config|
  config.throttle('login', 20, 60 * 1000) do |req|
    req.ip if req.path == '/login' && req.post?
  end
end

Другой пример того, как подавлять запросы GET для пути /api/* с максимальной скоростью 50 запросов в секунду на токен API:

Rack::Defense.setup do |config|
  config.throttle('api', 50, 1000) do |req|
    req.env['HTTP_AUTHORIZATION'] if %r{^/api/} =~ req.path
  end 
end

disclamer: Я сторонник поддержки gem.

Ответ 3

Здесь есть SO о том, почему вы, возможно, захотите оценить лимит вне своего приложения. Пища для размышлений, по крайней мере. Я ищу это решение самостоятельно, и я в эфире, хочу ли я сделать это на прикладном уровне.