Реализация 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 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
  });
});

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

Versioning через Gateway

// Header-based versioning
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 недели