Gymterview
middle

Что такое API Gateway и зачем он нужен?

API Gateway — это единая точка входа для всех клиентских запросов к микросервисам. Он выступает обратным прокси, маршрутизирует запросы к соответствующим сервисам и выполняет сквозные функции: аутентификацию, rate limiting, логирование.

Функции API Gateway

  • Маршрутизация запросов — направление запросов к нужному сервису по URL-пути.
  • Аутентификация и авторизация — проверка токенов (JWT, OAuth2) на входе.
  • Rate limiting — ограничение количества запросов.
  • Load balancing — балансировка нагрузки между экземплярами сервиса.
  • Агрегация запросов — объединение ответов от нескольких сервисов.
  • Кеширование — кеширование частых запросов.
  • Трансформация запросов/ответов — изменение формата данных.
  • SSL termination — обработка HTTPS.
  • Логирование и мониторинг — централизованный сбор метрик.
Spring Cloud Gateway: YAML-конфигурация
# application.yml
spring:
  cloud:
    gateway:
      routes:
        - id: payment-service
          uri: lb://payment-service
          predicates:
            - Path=/api/payments/**
          filters:
            - StripPrefix=1
            - name: CircuitBreaker
              args:
                name: paymentCircuitBreaker
                fallbackUri: forward:/fallback/payments
            - name: RequestRateLimiter
              args:
                redis-rate-limiter.replenishRate: 100
                redis-rate-limiter.burstCapacity: 200

        - id: customer-service
          uri: lb://customer-service
          predicates:
            - Path=/api/customers/**
          filters:
            - StripPrefix=1
            - AddRequestHeader=X-Request-Source, api-gateway
Spring Cloud Gateway: программная конфигурация
@Configuration
public class GatewayConfig {

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
            .route("payment-service", r -> r
                .path("/api/payments/**")
                .filters(f -> f
                    .stripPrefix(1)
                    .addRequestHeader("X-Gateway", "true")
                    .retry(config -> config
                        .setRetries(3)
                        .setStatuses(HttpStatus.SERVICE_UNAVAILABLE)))
                .uri("lb://payment-service"))
            .build();
    }
}

Альтернативные решения

  • Kong — высокопроизводительный API Gateway на базе Nginx, с плагинами.
  • NGINX — может использоваться как простой API Gateway.
  • AWS API Gateway — управляемый сервис в облаке AWS.
  • Envoy — часто используется в связке с Service Mesh (Istio).

На собеседовании: API Gateway — это не просто «прокси». Покажите, что понимаете его роль в безопасности (JWT-валидация на входе), устойчивости (circuit breaker, rate limiting) и наблюдаемости (централизованное логирование). Частая ошибка — не упомянуть, что Gateway может стать единой точкой отказа.