Реалізація API Gateway Pattern для мікросервісів

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація API Gateway Pattern для мікросервісів
Складна
~2-4 тижні
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Реалізація API Gateway Pattern для мікросервісів

API Gateway — єдина точка входу для всіх клієнтів системи. Замість того щоб фронтенд або мобільний додаток звертались безпосередньо до десятків мікросервісів, вони взаємодіють з одним шлюзом, який маршрутизує запити, агрегує дані, застосовує аутентифікацію та rate limiting.

Функції 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

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' });
  }
}

Агрегація запитів (BFF-паттерн у шлюзі)

Мобільний клієнт за один запит отримує дані з кількох сервісів:

// Gateway агрегує дані з кількох сервісів
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
  });
});

Конфігурація 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

Версіонування через Gateway

// Версіонування на основі заголовків
app.use((req, res, next) => {
  const version = req.headers['api-version'] || 'v1';

  if (version === 'v2') {
    req.url = req.url.replace('/api/', '/api/v2/');
  }
  next();
});

Графік реалізації

  • Базова конфігурація Kong або Traefik з маршрутизацією та JWT — 3–5 днів
  • Налаштування rate limiting, circuit breaker, логування — 2–3 дні
  • Агрегуючий шлюз з власною бізнес-логікою — 1–2 тижні