Реализация маршрутизации запросов через API Gateway

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

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Реализация маршрутизации запросов через API Gateway
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • 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

Маршрутизация (routing) — ключевая функция API Gateway: определить, какой backend-сервис должен обработать конкретный запрос. Сложная маршрутизация позволяет управлять версиями API, канареечными деплоями и tenant-based routing без изменения клиентского кода.

Типы маршрутизации

Path-based routing — по пути URL:

  • /api/v1/users → users-service
  • /api/v1/orders → orders-service
  • /api/v2/users → users-service-v2

Header-based routing — по HTTP-заголовкам:

  • X-API-Version: 2 → новая версия
  • X-Tenant-ID: enterprise → выделенный кластер

Query parameter routing:

  • ?version=beta → beta backend

Method-based routing:

  • GET /resources → read-service
  • POST /resources → write-service

Реализация в Kong

# Версионирование через path prefix
curl -X POST http://localhost:8001/services/users-v1/routes \
  -d "paths[]=/api/v1/users" \
  -d "strip_path=false" \
  -d "name=users-v1-route"

curl -X POST http://localhost:8001/services/users-v2/routes \
  -d "paths[]=/api/v2/users" \
  -d "strip_path=false" \
  -d "name=users-v2-route"

# Header-based routing
curl -X POST http://localhost:8001/services/users-v2/routes \
  -d "paths[]=/api/users" \
  -d 'headers[X-API-Version][]=2' \
  -d "name=users-v2-header-route"

Реализация в Traefik

# dynamic/routing.yml
http:
  routers:
    # Path-based
    users-v1:
      rule: "PathPrefix(`/api/v1/users`)"
      service: users-v1-service
      priority: 10

    users-v2:
      rule: "PathPrefix(`/api/v2/users`)"
      service: users-v2-service
      priority: 10

    # Header-based
    users-enterprise:
      rule: "PathPrefix(`/api/users`) && Headers(`X-Tenant-Tier`, `enterprise`)"
      service: users-enterprise-service
      priority: 20  # выше priority = проверяется первым

    # Регулярное выражение
    users-by-region:
      rule: "PathRegexp(`^/api/v1/(eu|us|asia)/users`)"
      service: regional-users-service
      middlewares: [extract-region]

Реализация в NGINX (без специализированного gateway)

# /etc/nginx/conf.d/api-routing.conf
map $http_x_api_version $backend_pool {
  "2"     "users_v2_backend";
  "beta"  "users_beta_backend";
  default "users_v1_backend";
}

upstream users_v1_backend { server users-v1:3000; }
upstream users_v2_backend { server users-v2:3000; }
upstream users_beta_backend { server users-beta:3000; }

server {
  listen 80;

  location ~ ^/api/v([0-9]+)/(.+) {
    set $version $1;
    set $path $2;

    proxy_pass http://users_v${version}_backend/$path$is_args$args;
    proxy_set_header X-API-Version $version;
  }

  # Tenant routing
  location /api/users {
    if ($http_x_tenant_tier = "enterprise") {
      proxy_pass http://enterprise-cluster;
    }
    proxy_pass http://users_v1_backend;
  }
}

Канареечная маршрутизация

Постепенный rollout новой версии по процентам трафика:

# Traefik weighted
http:
  services:
    users-canary:
      weighted:
        services:
          - name: users-stable
            weight: 95
          - name: users-canary
            weight: 5
-- Kong: случайная маршрутизация через плагин
-- 10% трафика → новый сервис
local random = math.random(100)
if random <= 10 then
  kong.service.set_upstream("users-v2")
else
  kong.service.set_upstream("users-v1")
end

Sticky routing (tenant affinity)

Запросы конкретного тенанта всегда попадают на один шард:

-- Kong Lua plugin
local tenant_id = kong.request.get_header("X-Tenant-ID")
local shard = tonumber(tenant_id) % 4  -- 4 шарда

local upstreams = {
  "shard-0.users-service:3000",
  "shard-1.users-service:3000",
  "shard-2.users-service:3000",
  "shard-3.users-service:3000"
}

kong.service.set_target(upstreams[shard + 1], 3000)

A/B routing по атрибутам пользователя

// KrakenD: routing по значению из JWT
// В конфигурации endpoint используем JWT claims для выбора backend

// Или через middleware:
// Если user.tier == 'premium' → premium-backend
// Иначе → standard-backend

Мониторинг маршрутов

Важно отслеживать распределение трафика между маршрутами:

# Prometheus запрос: процент трафика по версиям
rate(kong_http_requests_total{route=~"users-v.*"}[5m])
  /
sum(rate(kong_http_requests_total{service="users"}[5m]))

Алерт при аномальном распределении (канарейка получила слишком много трафика):

- alert: CanaryTrafficAnomaly
  expr: |
    rate(http_requests_total{version="v2"}[5m]) /
    rate(http_requests_total[5m]) > 0.15
  for: 2m
  annotations:
    summary: "Canary receiving more than 15% of traffic"

Срок выполнения

Настройка многоуровневой маршрутизации (path + header + tenant) на выбранном API Gateway — 1–2 рабочих дня.