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