2010-03-07 113 views
10

嘗試谷歌周圍的Rails插件,這將允許限制特定資源消耗的請求量。 Django的Piston有一些開源的代碼。有沒有可用的Rails開箱即用,或者可以肯定地認爲,看看Piston如何做,並將它作爲Rails插件移植是可以使用的東西?限制對Ruby on Rails API的請求

回答

1

有一個SO thread here爲什麼你可能要進行速率限制在應用程序外部至少,思考的食物。我正在自己尋找這個解決方案,並且無論我是否想在應用程序層中完成這項工作。

2

Rack::Defense是一個用於請求限制和過濾的機架中間件。它設置簡單,佔地面積小,只有兩個依賴項(機架和redis)。您可以過濾在幾乎任何條件:IP,API令牌,用戶名等

這裏是你如何將油門路徑/login POST請求,每個IP每分鐘20請求的最大速率的例子:

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

如何油門路徑/api/* GET請求,每個API令牌每秒50個請求的最大速率又如:

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維護者。