Skip to content

Latest commit

Β 

History

History
101 lines (61 loc) Β· 2.42 KB

File metadata and controls

101 lines (61 loc) Β· 2.42 KB

πŸ“Œ Overview

This project implements an API Rate Limiting System using Spring Boot and MongoDB. It enforces fair usage of APIs by restricting requests based on configurable rules and provides monitoring & analytics endpoints.

⚑ Features Implemented

Sliding Window (Per-Minute Limits): Restricts requests per API key within the last minute.

Fixed Window (Daily Quotas): Enforces daily request caps per API key.

Burst Handling: Allows brief request spikes above normal limits.

Endpoint-Specific Limits: Different rate limits for different API endpoints.

IP-Based Blocking: Temporarily blocks abusive IPs.

Monitoring & Analytics APIs:

/api/health β†’ System stats (requests/min, uptime, denied requests, etc.)

/api/violations β†’ Recent violations with reason and timestamp

πŸ›  Tech Stack

Java 17

Spring Boot (REST APIs, validation)

MongoDB (API keys, request logs, violations)

Maven (build tool)

Docker (optional for MongoDB)

πŸ“‚ Project Structure src/main/java/com/rate_limiter β”‚ β”œβ”€β”€ controller # REST controllers (RateLimit, Analytics, API Keys) β”œβ”€β”€ service # Business logic (rate limiting, analytics) β”œβ”€β”€ model # MongoDB entities (ApiKey, RequestLog, DTOs) β”œβ”€β”€ repository # Mongo repositories └── RateLimiterApplication.java # Entry point

πŸš€ Getting Started βœ… Prerequisites

Java 17+

Maven

MongoDB (local or Docker)

▢️ Run MongoDB with Docker docker run --name mongo -d -p 27017:27017 mongo

▢️ Build & Run Backend mvn clean install mvn spring-boot:run

The backend will start at:

http://localhost:8080

πŸ“‘ API Endpoints πŸ”‘ API Key Management

POST /api/keys β†’ Create API Key

GET /api/keys β†’ List all API Keys

βš–οΈ Rate Limiting

POST /api/check-limit?endpoint=/api/test&ip=192.168.1.1 Header: X-API-KEY: Response:

{ "allowed": true, "remaining": 998, "limit": 1000 }

πŸ“Š Monitoring & Analytics

GET /api/health β†’ Live system stats

GET /api/violations?limit=10&appName=MyApp β†’ Recent violations

πŸ§ͺ Testing with cURL curl --location --request POST 'http://localhost:8080/api/check-limit?endpoint=%2Fapi%2Ftest&ip=192.168.1.1'
--header 'X-API-KEY: '

πŸš€ Future Enhancements

Redis integration for faster request counting

JWT-based authentication for API key management

Advanced alerting for violations