Попытка Google использовать плагин Rails, который позволит регулировать количество запросов, которые потребляет определенный ресурс. Django Piston имеет для этого открытый код. Есть ли что-то доступное из коробки для Rails или можно ли предположить, что смотреть на то, как Piston делает это и переносить его как плагин Rails - это то, над чем можно работать?
Запросы дросселирования к API Ruby on Rails
Ответ 1
Вот несколько промежуточных промежуточных программ, которые выполняют то, что вам нужно: http://github.com/dambalah/api-throttling
и здесь сообщение в блоге о разработке этого промежуточного программного обеспечения: http://blog.messagepub.com/2009/05/05/how-to-rack-middleware-for-api-throttling/
Ответ 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 о том, почему вы, возможно, захотите оценить лимит вне своего приложения. Пища для размышлений, по крайней мере. Я ищу это решение самостоятельно, и я в эфире, хочу ли я сделать это на прикладном уровне.