spark_rate_limiter
Rate limiting middleware for Spark applications.
Features
- Client identification by IP address (or custom function)
- Default rate limit rule for all routes
- Path-specific rules with prefix or exact matching
- In-memory request tracking (pluggable store interface)
- Automatic reset after time window expires
- Returns 429 Too Many Requests when limit exceeded
Installation
dependencies:
spark_rate_limiter: ^1.0.0Usage
Basic Setup (100 requests/minute)
import 'package:spark_rate_limiter/spark_rate_limiter.dart';
final handler = Pipeline()
.addMiddleware(rateLimiterMiddleware(
config: RateLimiterConfig.defaults(),
))
.addHandler(myRouter);Custom Configuration
rateLimiterMiddleware(
config: RateLimiterConfig(
defaultRule: RateLimitRule(100, Duration(minutes: 1)),
specificRules: {
'/login': RateLimitRule(5, Duration(minutes: 1)),
'/api': RateLimitRule(1000, Duration(minutes: 1)),
'/upload': RateLimitRule(10, Duration(hours: 1)),
},
),
)Custom Client Identification
rateLimiterMiddleware(
config: RateLimiterConfig(
defaultRule: RateLimitRule(100, Duration(minutes: 1)),
identify: (request) {
return request.headers['x-user-id'] ?? request.clientIp;
},
),
)Custom Store
// Implement RateLimitStore for Redis, database, etc.
rateLimiterMiddleware(
config: RateLimiterConfig.defaults(),
store: MyRedisRateLimitStore(),
)