【问题标题】:Throttling requests to a Ruby on Rails API限制对 Ruby on Rails API 的请求
【发布时间】:2010-03-07 16:42:07
【问题描述】:

尝试在 Google 上寻找一个 Rails 插件,该插件将允许限制特定资源消耗的请求数量。 Django 的Piston 有一些开源代码。 Rails 是否有现成可用的东西,或者可以安全地假设看看 Piston 是如何做到的并将其作为 Rails 插件移植是可以工作的?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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
      

      声明:我是 Rack::Defense gem 维护者。

      【讨论】:

        【解决方案3】:

        有一个 SO thread here 关于为什么您可能希望在应用程序之外进行速率限制。至少值得深思。我自己也在寻找这个解决方案,我是否想在应用层做这个还悬而未决。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多