Вопрос 9 · Раздел 17

Что такое API Gateway и какие задачи он решает

4. Логирование — логи всех запросов 5. CORS — обработка cross-origin запросов (CORS — Cross-Origin Resource Sharing, механизм безопасности браузера)

Версии по языкам: English Russian Ukrainian

🟢 Junior Level

API Gateway — это единая точка входа в систему микросервисов. Все запросы от клиентов проходят через него.

Клиент → API Gateway → Сервис A
                     → Сервис B
                     → Сервис C

Задачи API Gateway:

  1. Роутинг — направить запрос к нужному сервису
  2. Аутентификация — проверить токен один раз
  3. Rate limiting — ограничить запросы (Rate Limiting — ограничение количества запросов от одного клиента)
  4. Логирование — логи всех запросов
  5. CORS — обработка cross-origin запросов (CORS — Cross-Origin Resource Sharing, механизм безопасности браузера)

🟡 Middle Level

Когда НЕ использовать API Gateway

  • Внутренние микросервисы, не面向 внешних клиентов
  • 2-3 сервиса — прямые вызовы проще
  • Latency-critical системы — лишний hop добавляет задержку

Функции API Gateway

1. Request routing: /api/users → User Service
                    /api/orders → Order Service

2. Authentication: проверить JWT токен

3. Rate limiting: 100 запросов в минуту на клиента

4. Caching: кэшировать ответы

5. Response transformation: преобразовать формат

6. Request aggregation: собрать данные из нескольких сервисов

Примеры

  • Spring Cloud Gateway
  • Kong
  • Nginx
  • AWS API Gateway
  • Zuul (Netflix)

Типичные ошибки

  1. Gateway bottleneck:
    Все запросы через один Gateway → один поток
    Решение: горизонтальное масштабирование Gateway
    

🔴 Senior Level

Архитектурные Trade-offs

Gateway BFF (Backend for Frontend)
Один Gateway проще в эксплуатации (один компонент мониторить). Отдельный на каждый клиент
BFF гибче: каждый клиент (web, mobile, API) получает свой оптимизированный endpoint. Больше инфраструктуры

Production Experience

Spring Cloud Gateway:

@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
    return builder.routes()
        .route("user-service", r -> r
            .path("/api/users/**")
            .filters(f -> f
                .circuitBreaker(config -> config
                    .setName("userCircuitBreaker"))
                .requestRateLimiter(config -> config
                    .setRateLimiter(redisRateLimiter)))
            .uri("lb://user-service"))
        .route("order-service", r -> r
            .path("/api/orders/**")
            .uri("lb://order-service"))
        .build();
}

// Когда circuit breaker открывается — клиент видит 503 Service Unavailable // (или кэшированный ответ, если настроен).

Best Practices

✅ Gateway без бизнес-логики
✅ Circuit breaker на Gateway
✅ Rate limiting
✅ Мониторинг и логирование
✅ Health checks

❌ Бизнес-логика в Gateway
❌ Один инстанс Gateway
❌ Без rate limiting

🎯 Шпаргалка для интервью

Обязательно знать:

  • API Gateway — единая точка входа, роутит запросы к микросервисам
  • Задачи: роутинг, аутентификация, rate limiting, логирование, CORS
  • Gateway НЕ должен содержать бизнес-логику
  • Circuit breaker на Gateway защищает от cascade failure
  • BFF (Backend for Frontend) — отдельный Gateway на каждый клиент (web, mobile)
  • Горизонтальное масштабирование Gateway обязателен (не один инстанс)
  • Популярные: Spring Cloud Gateway, Kong, Nginx, AWS API Gateway

Частые уточняющие вопросы:

  • Когда НЕ использовать Gateway? Внутренние сервисы, 2-3 сервиса, latency-critical системы.
  • Gateway vs BFF? Gateway — один для всех, BFF — отдельный на каждый клиент, гибче но больше инфраструктуры.
  • Как масштабировать Gateway? Горизонтально + load balancer перед ним.
  • Что если Gateway упал? Вся система недоступна — нужен HA deployment.

Красные флаги (НЕ говорить):

  • “Gateway — лучшее место для бизнес-логики” — нет, только routing и cross-cutting concerns
  • “Один инстанс Gateway достаточно” — это single point of failure
  • “Rate limiting не нужен” — защита от abuse обязательна
  • “Gateway добавляет negligible latency” — добавляет hop, важно для latency-critical

Связанные темы:

  • [[7. Что такое Service Discovery и зачем он нужен]]
  • [[8. В чём разница между client-side и server-side discovery]]
  • [[23. Как реализовать аутентификацию и авторизацию в микросервисах]]
  • [[5. Что такое паттерн Circuit Breaker]]
  • [[15. Как организовать коммуникацию между микросервисами]]