# akhilkumar-dot/api-rate-limiter architecture

> Architecture diagram of the GitHub repository akhilkumar-dot/api-rate-limiter, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/akhilkumar-dot/api-rate-limiter
- Repository: https://github.com/akhilkumar-dot/api-rate-limiter

## Overview

The platform’s main workflow is developer registration/login, API-rule configuration, then client requests routed through the gateway for rule lookup and rate evaluation; outcomes feed asynchronous analytics. The graph includes documented service and infrastructure links plus source-visible internal calls. Some storage and service-discovery wiring is documented but not present in sampled implementation excerpts, so those links cite the README rather than implying source inspection.

Main entry points: [`api-gateway/src/main/java/com/ratelimiter/api_gateway`](https://github.com/akhilkumar-dot/api-rate-limiter/tree/main/api-gateway/src/main/java/com/ratelimiter/api_gateway) (API Gateway), [`eureka-server/src/main/java/com/fooddelivery/eureka_server/EurekaServerApplication.java`](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/eureka-server/src/main/java/com/fooddelivery/eureka_server/EurekaServerApplication.java) (Eureka Registry), [`rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/service/RateLimiterServiceImpl.java`](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/service/RateLimiterServiceImpl.java) (Limit Orchestrator), [`auth-service/src/main/java/com/ratelimiter/auth_service/service/AuthServiceImpl.java`](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/auth-service/src/main/java/com/ratelimiter/auth_service/service/AuthServiceImpl.java) (Auth Service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity"]
  node_authcontroller["Auth API"]
  node_authservice["Auth Service"]
  node_jwt["JWT Utility<br/>[JwtUtil.java]"]
  node_developers[("Developer Records")]
end

subgraph group_configuration["API Configuration"]
  node_configapi["Config API"]
  node_configservice["Config Service"]
  node_configrepo[("Config Repository")]
end

subgraph group_evaluation["Rate Evaluation"]
  node_ratelimitcontroller["Limit API"]
  node_ratelimitservice["Limit Orchestrator"]
  node_configclient["Config Client"]
  node_algorithms["Limit Algorithms"]
  node_redis[("Redis State")]
  node_eventproducer["Event Producer"]
end

subgraph group_analytics["Analytics"]
  node_eventconsumer["Event Consumer"]
  node_analyticsservice["Analytics Service"]
  node_analyticsapi["Analytics API"]
  node_requestlogs[("Request Logs")]
end

subgraph group_platform["Platform Infrastructure"]
  node_gateway["API Gateway"]
  node_jwtfilter["JWT Filter<br/>[JwtAuthFilter.java]"]
  node_kafka["Kafka Broker"]
  node_postgres[("PostgreSQL")]
  node_eureka["Eureka Registry"]
end

node_developer(("Developer / Client"))

node_developer -->|"sends requests"| node_gateway
node_gateway -->|"validates JWT"| node_jwtfilter
node_gateway -->|"routes auth"| node_authcontroller
node_gateway -->|"routes config"| node_configapi
node_gateway -->|"routes API calls"| node_ratelimitcontroller
node_developer -->|"registers or logs in"| node_authcontroller
node_authcontroller -->|"calls"| node_authservice
node_authservice -->|"reads and writes"| node_developers
node_authservice -->|"issues token"| node_jwt
node_developer -->|"defines rules"| node_configapi
node_configapi -->|"calls"| node_configservice
node_configservice -.->|"persists rules"| node_configrepo
node_ratelimitcontroller -->|"calls"| node_ratelimitservice
node_ratelimitservice -->|"fetches rule"| node_configclient
node_ratelimitservice -->|"dispatches evaluation"| node_algorithms
node_algorithms -.->|"evaluates state"| node_redis
node_ratelimitservice -->|"publishes outcome"| node_eventproducer
node_eventproducer -->|"sends event"| node_kafka
node_kafka -->|"delivers event"| node_eventconsumer
node_eventconsumer -.->|"stores logs"| node_requestlogs
node_analyticsapi -->|"requests reports"| node_analyticsservice
node_analyticsservice -.->|"queries logs"| node_requestlogs
node_requestlogs -->|"stores in"| node_postgres
node_eureka -.->|"registers services"| node_gateway
node_eureka -.->|"registers services"| node_authservice
node_eureka -.->|"registers services"| node_configservice
node_eureka -.->|"registers services"| node_ratelimitservice
node_eureka -.->|"registers services"| node_analyticsservice

click node_gateway "https://github.com/akhilkumar-dot/api-rate-limiter/tree/main/api-gateway/src/main/java/com/ratelimiter/api_gateway"
click node_jwtfilter "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/api-gateway/src/main/java/com/ratelimiter/api_gateway/filter/JwtAuthFilter.java"
click node_authcontroller "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/auth-service/src/main/java/com/ratelimiter/auth_service/controller/AuthController.java"
click node_authservice "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/auth-service/src/main/java/com/ratelimiter/auth_service/service/AuthServiceImpl.java"
click node_jwt "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/auth-service/src/main/java/com/ratelimiter/auth_service/config/JwtUtil.java"
click node_developers "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/auth-service/src/main/java/com/ratelimiter/auth_service/repository/DeveloperRepository.java"
click node_configapi "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/api-config-service/src/main/java/com/ratelimiter/api_config_service/controller/ApiConfigController.java"
click node_configservice "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/api-config-service/src/main/java/com/ratelimiter/api_config_service/service/ApiConfigService.java"
click node_configrepo "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/api-config-service/src/main/java/com/ratelimiter/api_config_service/repository/ApiConfigRepository.java"
click node_ratelimitcontroller "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/controller/RateLimiterController.java"
click node_ratelimitservice "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/service/RateLimiterServiceImpl.java"
click node_configclient "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/client/ApiConfigClient.java"
click node_algorithms "https://github.com/akhilkumar-dot/api-rate-limiter/tree/main/rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/algorithm"
click node_eventproducer "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/kafka/RateLimitEventProducer.java"
click node_eventconsumer "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/analytics-service/src/main/java/com/ratelimiter/analytics_service/kafka/RateLimitEventConsumer.java"
click node_analyticsservice "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/analytics-service/src/main/java/com/ratelimiter/analytics_service/service/AnalyticsServiceImpl.java"
click node_analyticsapi "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/analytics-service/src/main/java/com/ratelimiter/analytics_service/controller/AnalyticsController.java"
click node_requestlogs "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/analytics-service/src/main/java/com/ratelimiter/analytics_service/repository/RequestLogRepository.java"
click node_eureka "https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/eureka-server/src/main/java/com/fooddelivery/eureka_server/EurekaServerApplication.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_authcontroller,node_authservice,node_jwt,node_developers,node_developer toneBlue
class node_configapi,node_configservice,node_configrepo toneAmber
class node_ratelimitcontroller,node_ratelimitservice,node_configclient,node_algorithms,node_redis,node_eventproducer toneMint
class node_eventconsumer,node_analyticsservice,node_analyticsapi,node_requestlogs toneRose
class node_gateway,node_jwtfilter,node_kafka,node_postgres,node_eureka toneIndigo
```

## Components

### Identity

- [Auth API](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/auth-service/src/main/java/com/ratelimiter/auth_service/controller/AuthController.java): `auth-service/src/main/java/com/ratelimiter/auth_service/controller/AuthController.java`
- [Auth Service](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/auth-service/src/main/java/com/ratelimiter/auth_service/service/AuthServiceImpl.java): `auth-service/src/main/java/com/ratelimiter/auth_service/service/AuthServiceImpl.java`
- [JWT Utility](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/auth-service/src/main/java/com/ratelimiter/auth_service/config/JwtUtil.java): `auth-service/src/main/java/com/ratelimiter/auth_service/config/JwtUtil.java`
- [Developer Records](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/auth-service/src/main/java/com/ratelimiter/auth_service/repository/DeveloperRepository.java): `auth-service/src/main/java/com/ratelimiter/auth_service/repository/DeveloperRepository.java`

### API Configuration

- [Config API](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/api-config-service/src/main/java/com/ratelimiter/api_config_service/controller/ApiConfigController.java): `api-config-service/src/main/java/com/ratelimiter/api_config_service/controller/ApiConfigController.java`
- [Config Service](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/api-config-service/src/main/java/com/ratelimiter/api_config_service/service/ApiConfigService.java): `api-config-service/src/main/java/com/ratelimiter/api_config_service/service/ApiConfigService.java`
- [Config Repository](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/api-config-service/src/main/java/com/ratelimiter/api_config_service/repository/ApiConfigRepository.java): `api-config-service/src/main/java/com/ratelimiter/api_config_service/repository/ApiConfigRepository.java`

### Rate Evaluation

- [Limit API](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/controller/RateLimiterController.java): `rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/controller/RateLimiterController.java`
- [Limit Orchestrator](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/service/RateLimiterServiceImpl.java): `rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/service/RateLimiterServiceImpl.java`
- [Config Client](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/client/ApiConfigClient.java): `rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/client/ApiConfigClient.java`
- [Limit Algorithms](https://github.com/akhilkumar-dot/api-rate-limiter/tree/main/rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/algorithm): `rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/algorithm`
- **Redis State**
- [Event Producer](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/kafka/RateLimitEventProducer.java): `rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/kafka/RateLimitEventProducer.java`

### Analytics

- [Event Consumer](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/analytics-service/src/main/java/com/ratelimiter/analytics_service/kafka/RateLimitEventConsumer.java): `analytics-service/src/main/java/com/ratelimiter/analytics_service/kafka/RateLimitEventConsumer.java`
- [Analytics Service](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/analytics-service/src/main/java/com/ratelimiter/analytics_service/service/AnalyticsServiceImpl.java): `analytics-service/src/main/java/com/ratelimiter/analytics_service/service/AnalyticsServiceImpl.java`
- [Analytics API](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/analytics-service/src/main/java/com/ratelimiter/analytics_service/controller/AnalyticsController.java): `analytics-service/src/main/java/com/ratelimiter/analytics_service/controller/AnalyticsController.java`
- [Request Logs](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/analytics-service/src/main/java/com/ratelimiter/analytics_service/repository/RequestLogRepository.java): `analytics-service/src/main/java/com/ratelimiter/analytics_service/repository/RequestLogRepository.java`

### Platform Infrastructure

- [API Gateway](https://github.com/akhilkumar-dot/api-rate-limiter/tree/main/api-gateway/src/main/java/com/ratelimiter/api_gateway): `api-gateway/src/main/java/com/ratelimiter/api_gateway`
- [JWT Filter](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/api-gateway/src/main/java/com/ratelimiter/api_gateway/filter/JwtAuthFilter.java): `api-gateway/src/main/java/com/ratelimiter/api_gateway/filter/JwtAuthFilter.java`
- **Kafka Broker**
- **PostgreSQL**
- [Eureka Registry](https://github.com/akhilkumar-dot/api-rate-limiter/blob/main/eureka-server/src/main/java/com/fooddelivery/eureka_server/EurekaServerApplication.java): `eureka-server/src/main/java/com/fooddelivery/eureka_server/EurekaServerApplication.java`

### Other components

- **Developer / Client**

## Connections

- Developer / Client → API Gateway: sends requests (evidence: `README.md`)
- API Gateway → JWT Filter: validates JWT (evidence: `README.md`)
- API Gateway → Auth API: routes auth (evidence: `README.md`)
- API Gateway → Config API: routes config (evidence: `README.md`)
- API Gateway → Limit API: routes API calls (evidence: `README.md`)
- Developer / Client → Auth API: registers or logs in (evidence: `README.md`)
- Auth API → Auth Service: calls (evidence: `auth-service/src/main/java/com/ratelimiter/auth_service/controller/AuthController.java`)
- Auth Service → Developer Records: reads and writes (evidence: `auth-service/src/main/java/com/ratelimiter/auth_service/service/AuthServiceImpl.java`)
- Auth Service → JWT Utility: issues token (evidence: `auth-service/src/main/java/com/ratelimiter/auth_service/service/AuthServiceImpl.java`)
- Developer / Client → Config API: defines rules (evidence: `README.md`)
- Config API → Config Service: calls (evidence: `api-config-service/src/main/java/com/ratelimiter/api_config_service/controller/ApiConfigController.java`)
- Config Service → Config Repository: persists rules (evidence: `README.md`)
- Limit API → Limit Orchestrator: calls (evidence: `rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/controller/RateLimiterController.java`)
- Limit Orchestrator → Config Client: fetches rule (evidence: `rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/service/RateLimiterServiceImpl.java`)
- Limit Orchestrator → Limit Algorithms: dispatches evaluation (evidence: `rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/service/RateLimiterServiceImpl.java`)
- Limit Algorithms → Redis State: evaluates state (evidence: `README.md`)
- Limit Orchestrator → Event Producer: publishes outcome (evidence: `rate-limiter-service/src/main/java/com/ratelimiter/rate_limiter_service/service/RateLimiterServiceImpl.java`)
- Event Producer → Kafka Broker: sends event (evidence: `README.md`)
- Kafka Broker → Event Consumer: delivers event (evidence: `README.md`)
- Event Consumer → Request Logs: stores logs (evidence: `README.md`)
- Analytics API → Analytics Service: requests reports (evidence: `analytics-service/src/main/java/com/ratelimiter/analytics_service/controller/AnalyticsController.java`)
- Analytics Service → Request Logs: queries logs (evidence: `README.md`)
- Request Logs → PostgreSQL: stores in (evidence: `README.md`)
- Eureka Registry → API Gateway: registers services (evidence: `README.md`)
- Eureka Registry → Auth Service: registers services (evidence: `README.md`)
- Eureka Registry → Config Service: registers services (evidence: `README.md`)
- Eureka Registry → Limit Orchestrator: registers services (evidence: `README.md`)
- Eureka Registry → Analytics Service: registers services (evidence: `README.md`)
