2010-03-07 10 views
10

Provare a Google in giro per un plug-in Rails che consenta di limitare la quantità di richieste che una particolare risorsa viene consumata. Django's ha un codice open source per questo. C'è qualcosa di disponibile pronto per Rails o è lecito ritenere che guardare a come Piston lo fa e portarlo come plugin Rails è qualcosa su cui si può lavorare?Limitazione delle richieste a un'API di Ruby on Rails

risposta

1

C'è un SO thread here sul perché si potrebbe desiderare di votare limite fuori dalla tua applicazione. Spunti di riflessione, almeno. Sto cercando questa soluzione da solo, e sono nell'aria se voglio farlo nel livello dell'applicazione.

2

Rack::Defense è un middleware rack per la limitazione e il filtraggio delle richieste. È facile da configurare, ha un ingombro ridotto e ha solo due dipendenze (rack e redis). È possibile filtrare praticamente su qualsiasi criterio: ip, api di token, nome utente ecc

Ecco un esempio di come si potrebbe strozzare richieste POST di percorso /login con una velocità massima di 20 richiesta per minuto per IP:

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

un altro esempio su come strozzare richieste GET di percorso /api/* con un tasso massimo del 50 richiesta per secondo a gettone 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: io sono il rack :: Difesa gem manutentore.