Питання 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. Як організувати комунікацію між мікросервісами]]