# API Gateway ## Overview API Gateway is DeepData's unified entry point, built on Spring Cloud Gateway, responsible for route forwarding, JWT authentication, and rate limiting. ## Architecture ``` backend/api-gateway/ ├── src/main/java/com/deepdata/gateway/ │ ├── config/ # Gateway configuration │ ├── filter/ # JWT authentication filter │ └── route/ # Route definitions └── src/main/resources/ └── application.yml # Gateway configuration ``` ## Configuration ### Port - **Default**: 8080 - **Nacos Discovery Port**: 30000 ### Key Configuration ```yaml spring: application: name: deepdata-gateway cloud: nacos: discovery: port: 30000 server-addr: ${NACOS_ADDR} username: consul password: deepdata: jwt: secret: ${JWT_SECRET} expiration-seconds: 3600 ``` ## Features ### 1. Route Forwarding - Forward frontend requests to corresponding backend services - Support for load balancing - Path rewriting ### 2. JWT Authentication - JWT Token-based authentication - Token validation and expiration checking - User context propagation ### 3. Rate Limiting - Request rate limiting (if configured) - Prevent API abuse ## Quick Start ### Prerequisites - JDK 21+ - Maven 3.8+ - Nacos service (if using service discovery) ### Build ```bash cd backend/api-gateway mvn clean install ``` ### Run ```bash cd backend/api-gateway mvn spring-boot:run ``` ## Development ### Adding New Routes Configure route rules in `application.yml` or via Nacos: ```yaml spring: cloud: gateway: routes: - id: data-management uri: lb://data-management-service predicates: - Path=/api/data-management/** filters: - StripPrefix=3 ``` ### Adding Custom Filters Create a `GlobalFilter` or `GatewayFilter`: ```java @Component public class AuthFilter implements GlobalFilter { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { // Filter logic return chain.filter(exchange); } } ``` ## Testing ### Test Route Forwarding ```bash curl http://localhost:8080/api/data-management/datasets ``` ### Test JWT Authentication ```bash curl -H "Authorization: Bearer " http://localhost:8080/api/protected-endpoint ``` ## Documentation - **Spring Cloud Gateway Docs**: https://docs.spring.io/spring-cloud-gateway/ - **Nacos Discovery**: https://nacos.io/ ## Related Links - [Backend README](../README.md) - [Main Application README](../services/main-application/README.md)