Webhook

Простыми словами

Webhook — HTTP-уведомление, которое одна система отправляет другой при событии, не дожидаясь периодического опроса. Получатель открывает endpoint, поэтому должен проверять источник, целостность, свежесть и повторную доставку сообщения.

Как применяется

Для webhook создают отдельный URL, проверяют HMAC или подпись по исходному телу, ограничивают размер и время, используют idempotency key и очередь. Секреты ротируют, ответы возвращают быстро, а обработку выполняют асинхронно.

Пример применения

Платёжный провайдер сообщает об оплате. Сервис проверяет подпись и timestamp до JSON-парсинга, отклоняет повтор по event_id, помещает событие в очередь и отвечает 2xx, не меняя статус заказа дважды.

Не путать с

  • СравнениеWebhook отправляет событие получателю; polling заставляет клиента регулярно запрашивать изменения. API предоставляет операции по запросу, а message broker доставляет сообщения через отдельную очередь и модель подтверждений.

Как это работает

  1. Зарегистрировать endpointПолучатель сообщает HTTPS-адрес и получает отдельный секрет или открытый ключ отправителя.
  2. Сформировать событиеИсточник сериализует payload, добавляет идентификатор, время и криптографическое доказательство.
  3. Проверить доставкуПолучатель валидирует TLS, подпись, свежесть, схему и уникальность до выполнения действия.
  4. Обработать надёжноСобытие ставится в очередь, повтор не меняет результат, ошибки приводят к контролируемому retry.

Продолжить изучение

Связанные термины

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

Можно ли доверять IP-адресу отправителя?

Это дополнительный сигнал, но не замена криптографической подписи и проверки TLS.

Почему подпись проверяют по raw body?

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

Что отвечать webhook-отправителю?

Быстрый успешный код после безопасного принятия в очередь; долгая бизнес-операция не должна удерживать соединение.

Webhook — механизм, при котором сервис отправляет HTTP-уведомление на заранее заданный URL при наступлении события.