Мультитенантная маршрутизация для SaaS API
Тенанты по хосту, по пути и white-label ingress для B2B API — контекст клиента на шлюзе, без гигантских условных роутеров в каждой функции.
Нагрузка и где ломается
Почему смешение клиентов обходится дорого
Если «кто клиент» проверяется наспех в одном стеке, выше риск перепутать ID и отдать чужие данные.
Без явного контекста клиента в запросе разбор инцидентов и логов затягивается.
Компромиссы
Что обычно идёт не так
Один огромный роутер с вложенными if скрывает ошибки auth и усложняет ревью.
Копировать одни и те же шаги деплоя под каждого клиента — плохо масштабируется.
Как помогает Inquir
Как устроен приём трафика
На API-Gateway задаёте, как из запроса получить tenant; в функцию уходит уже нормализованный контекст.
Общие логи и секреты — без смешивания процессов разных клиентов в одном рантайме.
Что получаете
Паттерны мультитенантной маршрутизации
По домену
Поддомены клиентов ведут на нужный набор функций.
По префиксу пути
Один сертификат и отдельный неймспейс URL.
Разный auth
Разные политики API keys на разные поверхности при необходимости.
Что делать дальше
Как внедрить мультитенантную маршрутизацию
Выбрать стратегию
Отдельный домен — нагляднее для white-label; путь — когда DNS ограничен.
Прокинуть контекст
Явно передавайте идентификатор клиента в обработчики через событие шлюза.
Тестировать изоляцию
Автоматизируйте негативные сценарии: доступ клиента A к маршрутам B запрещён.
Пример кода
Что видит функция
Событие API-Gateway несёт заголовки и тело в привычном HTTP-виде — проще отлаживать и логировать.
export async function handler(event) { const tenantId = event.headers['x-tenant-id'] ?? event.headers['X-Tenant-Id']; const payload = JSON.parse(event.body || '{}'); const data = await loadForTenant(tenantId, payload); return { statusCode: 200, body: JSON.stringify(data) }; }
Когда подходит
Когда это нужно
Когда это уместно
- B2B SaaS API
- Отдельные URL вебхуков на клиента
Когда лучше не трогать
- Один тенант и один продукт — достаточно простого роутинга
FAQ
Вопросы и ответы
Это заменяет политики в базе данных?
Нет. Шлюз помогает не путать клиентов на входе; в БД всё равно нужны row-level правила и тесты.
Домен или префикс пути?
Домен проще для white-label API. Префикс — когда с DNS туго. В обоих случаях важно явно передавать tenant.
Как проверять изоляцию?
Негативные тесты: токен клиента A не должен работать на маршрутах B; в логах — стабильный тег клиента.