Skip to content

Latest commit

 

History

History
130 lines (103 loc) · 2.57 KB

File metadata and controls

130 lines (103 loc) · 2.57 KB

API Gateway

Overview

API Gateway is DataMate'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/datamate/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

spring:
  application:
    name: datamate-gateway
  cloud:
    nacos:
      discovery:
        port: 30000
        server-addr: ${NACOS_ADDR}
        username: consul
        password:
datamate:
  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

cd backend/api-gateway
mvn clean install

Run

cd backend/api-gateway
mvn spring-boot:run

Development

Adding New Routes

Configure route rules in application.yml or via Nacos:

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:

@Component
public class AuthFilter implements GlobalFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // Filter logic
        return chain.filter(exchange);
    }
}

Testing

Test Route Forwarding

curl http://localhost:8080/api/data-management/datasets

Test JWT Authentication

curl -H "Authorization: Bearer <token>" http://localhost:8080/api/protected-endpoint

Documentation

Related Links