Мультитенантный вход

Мультитенантная маршрутизация для SaaS API

Тенанты по хосту, тенанты по пути и white-label точка входа для B2B API: контекст тенанта фиксируется на шлюзе — и обработчикам не нужны гигантские условные роутеры.

Обновлено: 2026-06-28

Суть ответа

Мультитенантная маршрутизация для SaaS API. Задайте измерения тенанта на шлюзе — каждый обработчик получит нормализованный контекст тенанта вместо того, чтобы заново выводить его из сырых запросов.

Когда подходит

  • B2B SaaS API
  • Отдельные эндпоинты вебхуков на клиента

На что обратить внимание

  • Гигантские роутеры с вложенными условиями прячут ошибки авторизации до тех пор, пока их не найдёт инцидент.
  • Копировать деплой под каждого тенанта — операционно не масштабируется дальше первой горстки клиентов.

Утечки между тенантами обходятся дорого

Один общий стек с проверками тенанта «на коленке» провоцирует путаницу ID — а путаница ID в B2B API означает утечку данных.

Разбираться «какой тенант это вызвал?» без метаданных маршрутизации — значит тормозить каждый инцидент ровно в самый неподходящий момент.

Каких анти-паттернов избегать

Гигантские роутеры с вложенными условиями прячут ошибки авторизации до тех пор, пока их не найдёт инцидент.

Копировать деплой под каждого тенанта — операционно не масштабируется дальше первой горстки клиентов.

Структурированный вход для мультитенантных API

Задайте измерения тенанта на шлюзе — каждый обработчик получит нормализованный контекст тенанта вместо того, чтобы заново выводить его из сырых запросов.

Переиспользуйте паттерны наблюдаемости и конфигурации между тенантами, не смешивая их процессы в одной среде выполнения.

Паттерны мультитенантной маршрутизации

Тенанты по хосту

Поддомены клиентов ведут на нужные наборы функций.

Префиксы пути

Один сертификат, а маршруты разнесены по неймспейсам.

Разделение авторизации

Разные политики API-ключей на разные поверхности, когда это нужно.

Как внедрить мультитенантную маршрутизацию в Inquir

1

Выбрать стратегию

Маршрутизация по хосту — для white-label и клиентских эндпоинтов; по пути — когда DNS ограничен.

2

Нормализовать контекст

Явно передавайте идентификаторы тенанта в обработчики.

3

Тестировать изоляцию

Автоматизируйте негативные тесты, пересекающие границы тенантов.

Паттерны тенантов по хосту и по пути

По хосту: acme.example.com → slug тенанта из заголовка Host. По пути: example.com/t/acme/api → slug тенанта из префикса URL. Оба паттерна нормализуют контекст тенанта до запуска обработчика.

по хосту: {tenant}.example.com
export async function handler(event) {
  // acme.example.com → 'acme'
  const host = event.headers['host'] ?? event.headers['Host'] ?? '';
  const tenantSlug = host.split('.')[0];
  if (!tenantSlug) return { statusCode: 400, body: 'missing tenant' };
  const payload = JSON.parse(event.body || '{}');
  const data = await loadForTenant(tenantSlug, payload);
  return { statusCode: 200, body: JSON.stringify(data) };
}
по пути: example.com/t/:tenant/*
export async function handler(event) {
  // /t/acme/api/orders → 'acme'
  const match = (event.rawPath ?? event.path ?? '').match(/^\/t\/([^/]+)/);
  const tenantSlug = match?.[1] ?? event.pathParameters?.tenant;
  if (!tenantSlug) return { statusCode: 400, body: 'missing tenant' };
  const payload = JSON.parse(event.body || '{}');
  const data = await loadForTenant(tenantSlug, payload);
  return { statusCode: 200, body: JSON.stringify(data) };
}

Когда это важно

Когда это уместно

  • B2B SaaS API
  • Отдельные эндпоинты вебхуков на клиента

Когда лучше выбрать другое

  • Однотенантные внутренние инструменты

Частые вопросы

Заменяет ли мультитенантная маршрутизация row-level security в базе?

Нет. Маршрутизация на входе помогает избежать ошибок между тенантами на шлюзе; базе всё равно нужны политики с учётом тенанта и тесты.

Тенанты по хосту или по пути — что выбрать?

Хосты выглядят чище для white-label API; пути выручают, когда DNS ограничен. Оба варианта рабочие, если контекст тенанта явно передаётся в обработчики.

Как тестировать изоляцию тенантов?

Автоматизируйте негативные тесты: токены тенанта A никогда не должны проходить на маршрутах тенанта B, а логи должны единообразно помечать ID тенанта.