限制对Ruby on Rails API的请求

试图谷歌周围寻找一个Rails插件,允许限制特定资源消耗的请求数量。 Django的Piston有一些开源代码。 Rails有没有开箱即用的东西,或者可以安全地假设看看Piston如何做到这一点并将其作为Rails插件移植是可以解决的问题?

这里有一些机架中间件可以完成您的工作: http : //github.com/dambalah/api-throttling

这是一篇关于该中间件开发的博客文章: http : //blog.messagepub.com/2009/05/05/how-to-rack-middleware-for-api-throttling/

Rack :: Defense是一个用于请求限制和过滤的机架中间件。 它易于设置,占用空间小,只有两个依赖项(rack和redis)。 您几乎可以过滤任何标准:ip,api token,用户名等。

下面是一个示例,说明如何限制路径/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:我是Rack :: Defense gem维护者。

这里有一个SO 线程,关于为什么你可能想要在应用程序之外限制速率。 值得深思的是,至少。 我自己正在寻找这个解决方案,无论我是想在应用程序层中做到这一点。