2010-03-07 14 views
10

Tratando de buscar un plugin de Rails que permita estrangular la cantidad de solicitudes que consume un recurso en particular. Piston de Django tiene algún código fuente abierto para esto. ¿Hay algo disponible de fábrica para Rails o es seguro asumir que mirar cómo lo hace Piston y portarlo como un plugin de Rails es algo en lo que se puede trabajar?Solicitudes de limitación a Ruby on Rails API

Respuesta

1

Hay un SO thread here acerca de por qué es posible que desee limitar la velocidad fuera de tu aplicación. Alimento para el pensamiento, al menos. Estoy buscando esta solución yo mismo, y estoy en el aire si quiero hacerlo en la capa de aplicación.

2

Rack::Defense es un middleware de rack para ralentizar y filtrar solicitudes. Es fácil de configurar, tiene una huella pequeña y solo tiene dos dependencias (rack y redis). Puedes realizar un filtrado sobre prácticamente cualquier criterio: ip, token de API, nombre de usuario, etc.

Aquí es un ejemplo cómo se estrangular las peticiones POST relativos a la trayectoria /login con una tasa máxima de 20 por minuto y por solicitud de IP:

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

Otro ejemplo de cómo estrangular peticiones GET relativos a la trayectoria /api/* con una tasa máxima de 50 por segundo por petición token de 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: soy el bastidor :: Defensa gem mantenedor.