Что такое API Gateway и какие задачи он решает
4. Логирование — логи всех запросов 5. CORS — обработка cross-origin запросов (CORS — Cross-Origin Resource Sharing, механизм безопасности браузера)
🟢 Junior Level
API Gateway — это единая точка входа в систему микросервисов. Все запросы от клиентов проходят через него.
Клиент → API Gateway → Сервис A
→ Сервис B
→ Сервис C
Задачи API Gateway:
- Роутинг — направить запрос к нужному сервису
- Аутентификация — проверить токен один раз
- Rate limiting — ограничить запросы (Rate Limiting — ограничение количества запросов от одного клиента)
- Логирование — логи всех запросов
- 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)
Типичные ошибки
- 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. Как организовать коммуникацию между микросервисами]]