Skip to content

Abhinav-gupta103/RateLimiterBackend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“Œ 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages