Serverless-обработка вебхуков на вашем домене
Проверяйте подписи вебхуков, подтверждайте в лимите провайдера и продолжайте тяжёлую работу в serverless-функциях, задачах или пайплайнах на своём домене. Стабильные URL, сырые тела для подписи, затем асинхронная передача.
Нагрузка и где ломается
Проблемы с хендлерами вебхуков
SaaS щедро повторяет доставку. Если хендлер тридцать секунд пишет в базу до ответа — таймауты, дубликаты и ночные звонки.
Пропуск проверки подписи «только на стейдже» или забытая идемпотентность хороши ровно до двух одинаковых событий с двумя списаниями.
Компромиссы
Почему ломается встроенная обработка вебхуков
Один общий endpoint смешивает аутентификацию людей и машин — хуже наблюдаемость.
Встроенные хендлеры в основном API смешивают масштабирование того, что хотелось развести.
Как помогает Inquir
Serverless-обработка вебхуков в Inquir
Функция на провайдера (или тип события) — узкая логика проверки в serverless-хендлере. Не смешиваете cookie пользователя с машинными ключами.
Маршруты задаются явно: безопасность видит URL, ожидаемые ключи и отличие от публичных API.
Что получаете
Возможности обработки вебхуков
Изолированные маршруты вебхуков
Пути провайдера — на небольшие хендлеры с узкими правами.
Трассировка выполнения
Тела (при необходимости сокращённые) и время, когда провайдер ставит доставку на паузу.
Передача в пайплайны
Быстрый ответ 200, тяжёлое — в пайплайн или задачу, если окна HTTP не хватает.
Что делать дальше
Как обрабатывать вебхуки на своём домене
Проверка подписи в serverless-хендлерах, быстрое подтверждение в лимите провайдера, идемпотентные записи.
Проверить
Подпись и разбор события с защитой.
Подтвердить или отложить
Отвечайте быстро; тяжёлое — в очередь.
Применить
Пишите в хранилище идемпотентно по идентификатору события у провайдера.
Пример кода
Набросок проверенного хендлера
Шлюз отдаёт событие в духе AWS API Gateway: body строкой, заголовки как пришли. Подключите проверку провайдера.
export async function handler(event) { const rawBody = event.body ?? ''; if (!verifySignature(rawBody, event.headers)) { return { statusCode: 400, body: 'invalid signature' }; } const evt = JSON.parse(rawBody); await enqueueForProcessing(evt.id, evt.type); return { statusCode: 200, body: 'ok' }; }
Когда подходит
Когда это в тему
Когда это уместно
- Нужен стабильный HTTPS-вход и serverless-процессор вебхуков на своём домене (шлюз и DNS под вашим контролем).
- Хочется развести трафик вебхуков и пользовательские API.
Когда лучше не трогать
- Вебхуки уходят только в чужую интеграционную платформу без своей среды выполнения.
FAQ
Вопросы и ответы
Медленный downstream?
Быстрое подтверждение, затем продолжение в serverless-пайплайне или задаче — чтобы таймауты провайдера не блокировали эффекты.
Маршруты по клиенту?
См. мультитенантную маршрутизацию: сегментация путей или хостов.
Повторные запросы?
Подпись, метка времени где есть, идемпотентные записи по идентификатору провайдера.