diff options
Diffstat (limited to '')
-rw-r--r-- | lib/Plack/Middleware/APIRateLimit.pm | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/Plack/Middleware/APIRateLimit.pm b/lib/Plack/Middleware/APIRateLimit.pm index 5819bee..6a86446 100644 --- a/lib/Plack/Middleware/APIRateLimit.pm +++ b/lib/Plack/Middleware/APIRateLimit.pm @@ -1,5 +1,8 @@ package Plack::Middleware::APIRateLimit; +use strict; +use warnings; + use Carp; use Scalar::Util; use Plack::Util; @@ -54,6 +57,11 @@ sub call { $self->backend->incr($key); my $request_done = $self->backend->get($key); + if (!$request_done) { + $self->backend->set($key, 1); + $request_done = 1; + } + return $self->over_rate_limit() if $request_done > $self->requests_per_hour; @@ -117,6 +125,9 @@ Plack::Middleware::APIRateLimit - A Plack Middleware for API Throttling enable "APIRateLimit", requests_per_hour => 2, backend => "Hash"; # or enable "APIRateLimit", requests_per_hour => 2, backend => ["Redis", {port => 6379, server => '127.0.0.1'}]; + # or + enable "APIRateLimit", request_per_hour => 2, backend => Redis->new(server => '127.0.0.1:6379'); + sub { [ '200', [ 'Content-Type' => 'text/html' ], ['hello world'] ] }; }; @@ -151,7 +162,8 @@ When will the counter be reseted (in epoch) =item B<backend> Which backend to use. Currently only Hash and Redis are supported. If no -backend is specified, Hash is used by default. +backend is specified, Hash is used by default. Backend must implement B<set>, +B<get> and B<incr>. =item B<requests_per_hour> |