Открыть сервис

Веб-хук

Веб-хук (англ. webhook, от web — «сеть» и hook — «крючок») — это механизм автоматической передачи данных между информационными системами, при котором одна система (источник) отправляет HTTP-запрос (обычно POST) на заранее заданный URL-адрес другой системы (получателя) при наступлении определённого события. В отличие от традиционного опроса (polling), веб-хуки работают по принципу «push»: данные отправляются немедленно после события, без необходимости постоянных запросов со стороны получателя.

Принцип работы

Веб-хук реализуется на основе клиент-серверной архитектуры поверх протокола HTTP/HTTPS. Процесс включает три ключевых этапа:

  1. Регистрация URL. Получатель (приложение, сервис) предоставляет источнику событий уникальный URL-адрес (endpoint), на который будут отправляться уведомления. Обычно это делается через настройки API или панель управления.
  1. Наступление события. В системе-источнике происходит определённое событие (например, новый заказ, изменение статуса, загрузка файла). Источник формирует HTTP-запрос, содержащий полезную нагрузку (payload) — данные о событии в структурированном формате (чаще всего JSON или XML).
  1. Отправка запроса. Источник отправляет POST-запрос на зарегистрированный URL. Получатель обрабатывает запрос, извлекает данные и выполняет соответствующее действие (например, обновляет базу данных, отправляет уведомление, запускает бизнес-процесс).

В случае ошибки (недоступность получателя, таймаут, некорректный ответ) источник может повторять отправку по определённому алгоритму (например, с экспоненциальной задержкой) или помещать сообщение в очередь для ручной обработки.

Отличие от других методов интеграции

Веб-хук и API-запросы (polling)

При использовании традиционного REST API получатель периодически (например, каждые 5 минут) отправляет запросы к источнику, чтобы проверить наличие новых данных. Веб-хук устраняет необходимость в таких постоянных опросах: данные доставляются только при реальном изменении, что снижает нагрузку на серверы и уменьшает задержки.

Веб-хук и WebSocket

WebSocket обеспечивает постоянное двустороннее соединение между клиентом и сервером, позволяя передавать данные в реальном времени. Веб-хуки, напротив, работают в режиме «один запрос — один ответ» без поддержания постоянного соединения. WebSocket предпочтительнее для приложений, требующих непрерывного потока данных (например, чаты, онлайн-игры), тогда как веб-хуки проще в реализации и подходят для эпизодических уведомлений.

Форматы данных и безопасность

Полезная нагрузка

Данные в веб-хуках передаются в теле HTTP-запроса. Наиболее распространённые форматы:

  • JSON — стандартный формат для большинства современных API (например, GitHub, Stripe, Slack).
  • XML — используется в некоторых корпоративных системах (например, Salesforce).
  • application/x-www-form-urlencoded — встречается в старых интеграциях.

Аутентификация и верификация

Поскольку веб-хуки отправляются на публичный URL, необходимы меры для подтверждения подлинности запроса:

  • Секретный токен (secret) — источник включает в заголовок запроса (например, X-Hub-Signature) подпись, вычисленную на основе тела запроса и общего секретного ключа. Получатель проверяет подпись, чтобы убедиться, что запрос не был подменён.
  • IP-белые списки — получатель принимает запросы только с известных IP-адресов источника.
  • HTTPS — обязательное использование шифрования для защиты данных при передаче.

Примеры использования

Системы контроля версий

GitHub, GitLab и Bitbucket отправляют веб-хуки при наступлении событий: push коммитов, создание pull request, открытие issue. Получатель (например, CI/CD-сервер Jenkins) может автоматически запускать сборку, тестирование или развёртывание.

Платёжные системы

Stripe, PayPal, Яндекс.Касса (входит в группу Сбера) уведомляют о статусе транзакций: успешный платёж, возврат, отклонение. Это позволяет интернет-магазинам мгновенно обновлять статус заказа без периодических запросов к API.

Мониторинг и оповещения

Сервисы мониторинга (PagerDuty, Opsgenie, Zabbix) отправляют веб-хуки в мессенджеры (Slack, Telegram) или системы управления инцидентами при превышении пороговых значений метрик.

Интернет вещей (IoT)

Устройства (датчики температуры, умные замки) отправляют веб-хуки на облачные серверы при изменении состояния, что позволяет реализовать сценарии автоматизации (например, включение кондиционера при повышении температуры).

Реализация веб-хуков

Для отправителя

Разработчик должен:

  1. Определить список событий, по которым будут отправляться уведомления.
  2. Реализовать HTTP-клиент, формирующий POST-запрос с данными события.
  3. Предоставить интерфейс для регистрации URL получателя (обычно через REST API или графический интерфейс).
  4. Реализовать механизм повторных отправок и логирования ошибок.

Для получателя

Разработчик должен:

  1. Создать HTTP-сервер (endpoint), принимающий POST-запросы.
  2. Реализовать парсинг полезной нагрузки (JSON/XML).
  3. Выполнить валидацию подписи (если используется секретный токен).
  4. Обработать данные (запись в БД, вызов бизнес-логики, отправка уведомления).
  5. Вернуть HTTP-статус 200 OK для подтверждения успешного приёма.

Преимущества и недостатки

Преимущества

  • Низкая задержка — данные доставляются практически мгновенно после события.
  • Эффективность — отсутствие холостых запросов (polling) снижает нагрузку на серверы и потребление трафика.
  • Простота реализации — не требует сложной инфраструктуры (брокеры сообщений, очереди).
  • Масштабируемость — легко добавлять новых получателей, регистрируя дополнительные URL.

Недостатки

  • Ненадёжность доставки — если получатель недоступен, данные могут быть потеряны (без реализации механизма повторных попыток).
  • Отсутствие гарантий порядка — при высокой частоте событий сообщения могут приходить в неправильном порядке.
  • Ограниченная безопасность — при отсутствии подписи возможна подмена запроса (атака «человек посередине»).
  • Сложность отладки — ошибки на стороне получателя (например, некорректный парсинг) могут быть неочевидны для отправителя.

Интересные факты

  • Термин «веб-хук» популяризировал Джефф Линдсей (Jeff Lindsay) в 2007 году в статье «Webhooks: The API for the Web».
  • Крупные платформы (GitHub, Slack, Stripe) предоставляют тестовые инструменты для проверки веб-хуков (например, отправка фиктивных событий на заданный URL).
  • В некоторых системах (например, в Telegram Bot API) веб-хуки являются альтернативой long polling для получения обновлений от бота.
  • Стандарт WebSub (бывший PubSubHubbub) использует механизм, аналогичный веб-хукам, для уведомлений об изменениях в веб-лентах (RSS/Atom).

Источники

  • Lindsay, J. (2007). «Webhooks: The API for the Web».
  • Документация GitHub API: «About webhooks».
  • Документация Stripe: «Webhooks».
  • Стандарт W3C: «WebSub (formerly PubSubHubbub)».
  • RFC 7230 — Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing.
Загружаем BFOmetr…