Реалізація API Gateway Pattern для мікросервісів
Уявіть: у вас 15 мікросервісів, кожен зі своїм API. Фронтенд робить десятки запитів до різних ендпоінтів, а аутентифікація дублюється в кожному сервісі. Один невдалий рефакторинг — і клієнти ловлять 500-ті помилки. API Gateway вирішує цю біль: єдина точка входу, централізована маршрутизація, аутентифікація та rate limiting. Замість прямих викликів до десятків сервісів клієнт спілкується з одним шлюзом, який маршрутизує запити, агрегує дані та застосовує політики безпеки.
Цей паттерн спрощує безпеку, знижує навантаження на сервіси та робить систему масштабованою. Наші інженери з 7+ річним досвідом у мікросервісах впроваджують API Gateway під ключ — від вибору інструменту до налаштування моніторингу. Зв'яжіться з нами для консультації щодо вашого проекту.
Технічні проблеми мікросервісної архітектури
Зазначимо: коли клієнт запитує дані з різних сервісів, виникає проблема множинних викликів. Наприклад, сторінка профілю потребує дані користувача, його замовлень та сповіщень. Без шлюзу клієнт робить 3 запити. З API Gateway — один. Шлюз паралельно збирає дані через Promise.allSettled і повертає єдину відповідь. Це знижує затримки на 40% і спрощує клієнтську логіку.
Інша проблема — дублювання аутентифікації. Кожен мікросервіс вимушений перевіряти JWT, що збільшує latency і ризик помилок. API Gateway перевіряє токен один раз і передає дані користувача в заголовках. Це зменшує навантаження на сервіси та централізує безпеку.
Як API Gateway вирішує проблему N+1 запитів?
Агрегація запитів (BFF-паттерн у шлюзі)
Мобільний клієнт за один запит отримує дані з кількох сервісів. Шлюз паралельно звертається до них і збирає відповідь у єдиний JSON. Приклад реалізації на Express:
// Gateway aggregates data from multiple services app.get('/api/dashboard/:userId', jwtMiddleware, async (req, res) => { const { userId } = req.params; const [user, orders, notifications] = await Promise.allSettled([ userService.get(`/users/${userId}`), orderService.get(`/orders?customerId=${userId}&limit=5`), notificationService.get(`/notifications/${userId}/unread`) ]); res.json({ user: user.status === 'fulfilled' ? user.value.data : null, recentOrders: orders.status === 'fulfilled' ? orders.value.data : [], unreadCount: notifications.status === 'fulfilled' ? notifications.value.data.count : 0 }); }); Які метрики покращує API Gateway?
Час відповіді (TTFB) зменшується за рахунок агрегації, кількість мережевих запитів скорочується в 3-5 разів. Core Web Vitals (LCP, CLS) покращуються, оскільки клієнт отримує всі дані однією відповіддю. Шлюз також знижує навантаження на мікросервіси — вони обробляють лише перевірені запити.
Як ми впроваджуємо API Gateway
Функції, які налаштовуємо
- Маршрутизація —
/api/orders→ Order Service,/api/users→ User Service - Аутентифікація та авторизація — JWT/OAuth2 перевіряється один раз у шлюзі
- Rate Limiting — захист від зловживань
- SSL Termination — TLS завершується на шлюзі, мікросервіси спілкуються по HTTP всередині кластера
- Request/Response трансформація — зміна форматів, додавання заголовків
- Агрегація запитів — один запит клієнта → кілька запитів до сервісів
- Circuit Breaker — захист від каскадних відмов
- Логування та трейсинг — єдина точка збору access logs
Порівняння інструментів
| Інструмент | Тип | Особливості |
|---|---|---|
| Kong | Self-hosted / Cloud | Плагіни на Lua/Go, Kubernetes Ingress |
| Traefik | Self-hosted | Автодискавері в Docker/K8s |
| AWS API Gateway | Managed | Інтеграція з Lambda, IAM |
| NGINX + Lua | Self-hosted | Максимальний контроль |
| Envoy | Proxy | gRPC, складні сценарії |
| Express Gateway | Node.js | Прості випадки |
Kong краще підходить для складних сценаріїв з кастомними плагінами, Traefik виграє в інтеграції з Kubernetes. Ми обираємо інструмент під ваш стек. Наш досвід включає проекти з Kong (понад 50 сервісів) та Traefik (K8s-кластери до 30 нод).
Конфігурація Kong
Kong — найпопулярніший self-hosted шлюз:
# kong.yaml (декларативна конфігурація) _format_version: "3.0" services: - name: order-service url: http://order-service:3000 routes: - name: orders-route paths: ["/api/orders"] methods: ["GET", "POST", "PUT", "DELETE"] - name: user-service url: http://user-service:3001 routes: - name: users-route paths: ["/api/users"] methods: ["GET", "PUT"] plugins: - name: jwt config: claims_to_verify: ["exp"] - name: rate-limiting config: minute: 100 hour: 5000 policy: local - name: request-transformer config: add: headers: ["X-Service-Version:1.0"] Аутентифікація на рівні шлюзу
JWT верифікується в шлюзі, мікросервіси отримують вже перевірений заголовок з даними користувача:
// Кастомний middleware на Express Gateway async function jwtMiddleware(req, res, next) { const token = req.headers.authorization?.replace('Bearer ', ''); if (!token) return res.status(401).json({ error: 'No token' }); try { const payload = jwt.verify(token, process.env.JWT_SECRET); // Прокидаємо дані користувача в заголовках req.headers['X-User-Id'] = payload.sub; req.headers['X-User-Role'] = payload.role; req.headers['X-User-Email'] = payload.email; next(); } catch { res.status(401).json({ error: 'Invalid token' }); } } Приклад конфігурації Traefik у Kubernetes
# Traefik IngressRoute apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: api-gateway spec: entryPoints: - websecure routes: - match: PathPrefix(`/api/orders`) kind: Rule services: - name: order-service port: 3000 middlewares: - name: jwt-auth - name: rate-limit - match: PathPrefix(`/api/users`) kind: Rule services: - name: user-service port: 3001 middlewares: - name: jwt-auth --- apiVersion: traefik.containo.us/v1alpha1 kind: Middleware metadata: name: rate-limit spec: rateLimit: average: 100 burst: 50 period: 1m Процес робіт з впровадження
| Етап | Тривалість | Результат |
|---|---|---|
| Аудит архітектури | 1-2 дні | Схема маршрутів, вимоги до безпеки |
| Налаштування базового шлюзу | 3-5 днів | Робоча маршрутизація, JWT-аутентифікація |
| Розширена конфігурація | 2-3 дні | Rate limiting, circuit breaker, логування |
| Кастомна агрегація | 1-2 тижні | BFF-ендпоінти, оптимізація запитів |
Вартість розраховується індивідуально після аудиту вашої архітектури. Замовте консультацію — оцінимо проект безкоштовно.
Склад реалізації API Gateway
- Проектування маршрутів і політик безпеки
- Налаштування Kong, Traefik або хмарного шлюзу під вашу інфраструктуру
- Інтеграція з JWT/OAuth2, LDAP або іншим провайдером
- Конфігурація rate limiting, circuit breaker та моніторингу
- Документація API та інструкції для команди
- Передача доступів та навчання ваших інженерів
Ми також надаємо підтримку після впровадження: оновлення версій, оптимізація продуктивності. Наші інженери мають сертифікати з Kubernetes та Kong, понад 7 років досвіду та 50+ успішних проектів. Ми гарантуємо стабільну роботу шлюзу під навантаженням. Отримайте консультацію для вашого проекту.
Додаткові матеріали
Детальніше про паттерн можна прочитати в Wikipedia. Офіційна документація Kong доступна на konghq.com.







