限制对Ruby on Rails API的请求
问题描述:
尝试谷歌周围的Rails插件,这将允许限制特定资源消耗的请求量。 Django的Piston有一些开源的代码。有没有可用的Rails开箱即用,或者可以肯定地认为,看看Piston如何做,并将它作为Rails插件移植是可以使用的东西?限制对Ruby on Rails API的请求
答
下面是一些机架中间件实现你以后:http://github.com/dambalah/api-throttling
,这里是关于中间件的开发博客文章:http://blog.messagepub.com/2009/05/05/how-to-rack-middleware-for-api-throttling/
答
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维护者。