Throttling requests to a Ruby on Rails API

后端 未结 3 592
梦毁少年i
梦毁少年i 2021-02-03 11:53

Trying to Google around for an a Rails plugin that will allow for throttling the amount of requests a particular resource gets consumed. Django\'s Piston has some open source co

3条回答
  •  旧时难觅i
    2021-02-03 12:21

    Rack::Defense is a rack middleware for request throttling and filtering. It is easy to set up, has a small footprint and has only two dependencies (rack and redis). You can filter on virtually any criteria: ip, api token, user name etc.

    Here is an example how you would throttle POST requests for path /login with a maximum rate of 20 request per minute 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
    

    Another example on how to throttle GET requests for path /api/* with a maximum rate of 50 request per second per API token:

    Rack::Defense.setup do |config|
      config.throttle('api', 50, 1000) do |req|
        req.env['HTTP_AUTHORIZATION'] if %r{^/api/} =~ req.path
      end 
    end
    

    disclamer: I am the Rack::Defense gem maintainer.

提交回复
热议问题