Мультитенантная маршрутизация для SaaS API
Тенанты по хосту, тенанты по пути и white-label точка входа для B2B API: контекст тенанта фиксируется на шлюзе — и обработчикам не нужны гигантские условные роутеры.
Обновлено: 2026-06-28
Кратко
Суть ответа
Мультитенантная маршрутизация для SaaS API. Задайте измерения тенанта на шлюзе — каждый обработчик получит нормализованный контекст тенанта вместо того, чтобы заново выводить его из сырых запросов.
Когда подходит
- B2B SaaS API
- Отдельные эндпоинты вебхуков на клиента
На что обратить внимание
- Гигантские роутеры с вложенными условиями прячут ошибки авторизации до тех пор, пока их не найдёт инцидент.
- Копировать деплой под каждого тенанта — операционно не масштабируется дальше первой горстки клиентов.
Нагрузка и где ломается
Утечки между тенантами обходятся дорого
Один общий стек с проверками тенанта «на коленке» провоцирует путаницу ID — а путаница ID в B2B API означает утечку данных.
Разбираться «какой тенант это вызвал?» без метаданных маршрутизации — значит тормозить каждый инцидент ровно в самый неподходящий момент.
Компромиссы
Каких анти-паттернов избегать
Гигантские роутеры с вложенными условиями прячут ошибки авторизации до тех пор, пока их не найдёт инцидент.
Копировать деплой под каждого тенанта — операционно не масштабируется дальше первой горстки клиентов.
Как помогает Inquir
Структурированный вход для мультитенантных API
Задайте измерения тенанта на шлюзе — каждый обработчик получит нормализованный контекст тенанта вместо того, чтобы заново выводить его из сырых запросов.
Переиспользуйте паттерны наблюдаемости и конфигурации между тенантами, не смешивая их процессы в одной среде выполнения.
Что вы получаете
Паттерны мультитенантной маршрутизации
Тенанты по хосту
Поддомены клиентов ведут на нужные наборы функций.
Префиксы пути
Один сертификат, а маршруты разнесены по неймспейсам.
Разделение авторизации
Разные политики API-ключей на разные поверхности, когда это нужно.
Что дальше
Как внедрить мультитенантную маршрутизацию в Inquir
Выбрать стратегию
Маршрутизация по хосту — для white-label и клиентских эндпоинтов; по пути — когда DNS ограничен.
Нормализовать контекст
Явно передавайте идентификаторы тенанта в обработчики.
Тестировать изоляцию
Автоматизируйте негативные тесты, пересекающие границы тенантов.
Пример кода
Паттерны тенантов по хосту и по пути
По хосту: acme.example.com → slug тенанта из заголовка Host. По пути: example.com/t/acme/api → slug тенанта из префикса URL. Оба паттерна нормализуют контекст тенанта до запуска обработчика.
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) }; }
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 тенанта.