Rate limiter for Falcon. Install with:
pip install falcon-ratelimit
Use like:
import falcon
from falconratelimit import rate_limit
class NoRedisResource(object):
@falcon.before(rate_limit(per_second=5, window_size=30,
resource='resource_name'))
def on_post(self, req, resp):
...
class RedisResource(object):
@falcon.before(rate_limit(redis_url='localhost:6379', per_second=1,
window_size=10))
def on_post(self, req, resp):
...
This package works by limiting the number of requests using two variables
per_second
and window_size
. In the first example above, the
NoRedisResource
class is restricted to 5 requests per second over a 30 second
window meaning that there is a limit of 150 requests over 30 seconds. The
default storage of calling the rate_limit
decorator is an in memory list to
store the number of requests for the given user using the resource
resource_name
.
The second example implements the optional storage to use Redis by passing in a
redis_url
to store user request data. Using Redis allows for the rate
limiting to be implemented across multiple instances of a particular
application. In the RedisResource
class example the user is allowed to make
1 request per second over 10 seconds meaning that there is a limit of 10
requests over 10 seconds. Since this example didn't pass in a resource
it
uses default
as the name for request storage.
If you do not have the redis
package installed, Redis-related functionality
will not work.