Лев Корольков
Руководитель IT-департамента EFSOL Oblako
Время чтения: 17 мин

Webhook

Автоматическое уведомление о событии

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

Например, платежный сервис может отправить интернет-магазину Webhook после успешной оплаты заказа. Магазину не нужно каждую минуту спрашивать платежную систему, изменился ли статус: уведомление приходит автоматически.

Webhooks широко используются в интеграциях между сервисами, платежных системах, CRM, интернет-магазинах, Git-платформах, CI/CD, службах доставки и облачных приложениях.

Что такое Webhook простыми словами

Webhook можно представить как автоматическое сообщение от одной программы другой.

Обычное API часто работает по принципу: клиент сам обращается к серверу и спрашивает нужную информацию. Webhook работает наоборот: сервер сам отправляет запрос клиентской системе, когда происходит важное событие.

Webhook позволяет системе не проверять состояние постоянно, а получить уведомление именно в момент наступления события.

Например, служба доставки сообщает интернет-магазину, что заказ передан курьеру. Как только статус меняется, ее сервер автоматически вызывает Webhook магазина.

Для чего нужны Webhooks

Webhooks используются там, где одна система должна быстро сообщать другой о событии.

  • подтверждение платежа;
  • изменение статуса заказа;
  • создание заявки в CRM;
  • уведомление о новом сообщении;
  • запуск CI/CD Pipeline;
  • реакция на Commit или Merge Request;
  • уведомление о завершении длительной операции;
  • синхронизация данных;
  • обработка событий доставки;
  • интеграция SaaS-сервисов.

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

Типовая схема включает систему-источник и систему-получатель.

  1. Получатель создает HTTP endpoint для Webhook.
  2. Адрес endpoint регистрируется в системе-источнике.
  3. В источнике происходит событие.
  4. Источник формирует HTTP-запрос.
  5. Запрос отправляется на Webhook URL.
  6. Получатель проверяет запрос и обрабатывает событие.
  7. Получатель возвращает HTTP-ответ.

Например, интернет-магазин указывает платежной системе адрес /webhooks/payment. После оплаты платежный сервис отправляет туда информацию о транзакции.

Что такое Webhook URL

Webhook URL — адрес HTTP endpoint, на который отправляются события.

Он должен быть доступен системе-источнику и принимать запросы ожидаемого формата.

https://example.ru/webhooks/payment

Не следует использовать случайный URL без защиты. Endpoint должен проверять источник запроса и корректность полученных данных.

Webhook и HTTP

Большинство Webhooks работает поверх HTTP или HTTPS.

Источник обычно отправляет POST-запрос, содержащий сведения о событии в теле.

Получатель возвращает HTTP status, подтверждающий успешную или неуспешную обработку.

КодТипичное значение
200Событие успешно принято
202Событие принято для асинхронной обработки
400Некорректный запрос
401Не прошла проверка аутентификации
403Запрос запрещен
500Ошибка обработки на стороне получателя
503Сервис временно недоступен

Пример Webhook

Платежная система отправляет интернет-магазину событие об успешной оплате.

{"event":"payment.succeeded","payment_id":"pay_125","order_id":"501","amount":4500,"status":"paid"}

Backend магазина принимает запрос, проверяет подпись, находит заказ 501 и меняет его статус на оплаченный.

После этого система может поставить задачу на отправку письма и передачу заказа в службу доставки.

Webhook и API

Webhook является одним из способов интеграции и часто используется вместе с API.

Через API клиент сам запрашивает данные или запускает операции. Через Webhook сервер сообщает клиенту о событии.

APIWebhook
Клиент инициирует запросИсточник события инициирует запрос
Используется для чтения и изменения данныхИспользуется для уведомления о событиях
Клиент решает, когда обратитьсяЗапрос отправляется при событии
Подходит для получения текущего состоянияПодходит для реакции на изменение состояния

Webhook и Polling

Polling — периодический опрос сервера на предмет изменений.

Например, интернет-магазин каждые 30 секунд спрашивает платежную систему, был ли оплачен заказ.

При Webhook необходимость постоянного опроса исчезает: платежная система сама сообщает об оплате.

PollingWebhook
Регулярные запросыЗапрос только при событии
Создает лишний трафик при отсутствии измененийЭкономнее по количеству обращений
Клиент контролирует частотуИсточник контролирует момент уведомления
Проще при недоступном входящем endpointТребует доступного Webhook URL

Почему Webhook не гарантирует однократную доставку

Сетевые системы работают с ошибками, timeout и повторными попытками.

Представим, что получатель успешно обработал Webhook, но его HTTP-ответ потерялся. Источник решает, что доставка завершилась неудачно, и отправляет событие повторно.

Поэтому приложение должно быть готово получить одно событие несколько раз.

Webhook следует проектировать так, чтобы повторная доставка одного события не приводила к повторному выполнению критичной бизнес-операции.

Идемпотентность Webhook

Идемпотентность означает, что повторная обработка одного события не создает нежелательного повторного результата.

Например, два одинаковых Webhook о платеже не должны создать два заказа или дважды начислить бонусы.

Для этого событию обычно присваивается уникальный идентификатор.

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

Event ID

Event ID — уникальный идентификатор конкретного события.

Он позволяет отличить повторную доставку от нового события.

Например, два запроса имеют одинаковый event_id. Backend проверяет журнал и обнаруживает, что первый уже обработан.

После этого второй запрос можно подтвердить без повторного изменения бизнес-данных.

Webhook Retry

Если получатель недоступен или возвращает ошибку, источник может повторить отправку.

Количество попыток и интервалы зависят от конкретного сервиса.

Хорошая система обычно не выполняет бесконечные запросы каждую секунду, а увеличивает интервал между попытками.

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

Exponential Backoff

Exponential Backoff — стратегия, при которой интервал между повторными попытками постепенно увеличивается.

Например, первая повторная отправка происходит через короткое время, следующая позже, а затем еще позже.

Это уменьшает дополнительную нагрузку на сервис, который уже испытывает проблемы.

Порядок Webhook-событий

Нельзя всегда исходить из того, что события поступят строго в том же порядке, в котором произошли.

Например, событие order.shipped из-за сетевой задержки теоретически может прийти позже или раньше другого уведомления, связанного с тем же заказом.

Система должна учитывать временные метки, версии состояния или получать актуальное состояние через API, если порядок критичен.

Webhook и Event-driven Architecture

Webhooks хорошо соответствуют событийной архитектуре.

Одна система сообщает, что нечто произошло, а другая решает, как на это реагировать.

Например, событие payment.succeeded может запустить создание чека, уведомление клиента и передачу заказа на склад.

При большом количестве внутренних событий вместо прямых Webhook могут использоваться Message Broker и Event Streaming.

Webhook и Message Queue

Webhook передает событие по HTTP непосредственно получателю, а Message Queue сохраняет сообщение в промежуточной очереди.

WebhookMessage Queue
Прямой HTTP-вызовПередача через брокер сообщений
Удобен между независимыми SaaS-системамиУдобна внутри распределенной архитектуры
Получатель должен иметь HTTP endpointПолучатель читает сообщения из очереди
Повторная доставка реализуется источникомМеханика доставки реализуется брокером

Эти механизмы могут использоваться совместно. Например, Backend быстро принимает Webhook и сразу помещает событие во внутреннюю очередь.

Почему Webhook лучше обрабатывать асинхронно

Источник обычно ожидает быстрый HTTP-ответ.

Если получатель при каждом Webhook несколько секунд создает отчет, отправляет письма и вызывает сторонние сервисы, возрастает риск timeout.

Надежнее проверить запрос, сохранить событие или поместить его в очередь и быстро подтвердить прием.

Основная бизнес-обработка выполняется Background Worker.

Webhook и Background Worker

Worker может обрабатывать задачи независимо от HTTP-соединения.

Например, Webhook платежа принимается за десятки миллисекунд, помещается в очередь и получает успешный HTTP-ответ.

Затем Worker обновляет заказ, отправляет email и выполняет интеграцию с CRM.

Так сбой внешнего сервиса не заставляет источник постоянно повторять весь Webhook.

Безопасность Webhook

Webhook endpoint является внешней точкой входа в Backend. Если просто доверять любому POST-запросу, злоумышленник может попытаться отправить поддельное событие.

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

  • использовать HTTPS;
  • проверять цифровую или HMAC-подпись;
  • проверять Timestamp;
  • защищаться от Replay Attack;
  • не доверять только IP-адресу;
  • валидировать структуру payload;
  • ограничивать размер запроса;
  • вести аудит критичных событий;
  • не записывать секреты в логи.

Webhook Signature

Webhook Signature — подпись запроса, которая помогает подтвердить его подлинность.

Один из распространенных подходов заключается в использовании общего секретного ключа. Источник вычисляет HMAC от содержимого запроса и передает подпись в HTTP-заголовке.

Получатель самостоятельно вычисляет ожидаемую подпись и сравнивает ее с полученной.

Сам секретный ключ по сети при каждом запросе не передается.

Почему нельзя доверять только API Key в URL

Иногда защиту Webhook пытаются реализовать длинным секретным параметром непосредственно в URL.

Это лучше полностью открытого endpoint, но адрес может попасть в access logs, аналитику, историю или конфигурацию.

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

Replay Attack

Replay Attack — повторная отправка ранее перехваченного корректного запроса.

Даже правильная подпись не всегда защищает от повторного воспроизведения, если она остается действительной неограниченно долго.

Поэтому в подпись часто включают Timestamp, а получатель отклоняет слишком старые запросы.

Дополнительно Event ID предотвращает повторную бизнес-обработку.

Webhook и HTTPS

Webhook URL в production должен использовать HTTPS.

Шифрование защищает содержимое запроса и заголовки при передаче через сеть.

Без HTTPS злоумышленник в определенных сетевых сценариях может получить или изменить данные.

Валидация Payload

Даже после успешной проверки подписи данные необходимо валидировать.

Например, поле status должно содержать одно из разрешенных значений, идентификатор иметь ожидаемый формат, а обязательные поля присутствовать.

Не следует автоматически доверять содержимому только потому, что источник известен.

Webhook и IP Allowlist

Некоторые сервисы публикуют диапазоны IP, с которых отправляются Webhooks.

Allowlist может быть дополнительным уровнем защиты, но не всегда подходит как единственный механизм.

IP-инфраструктура может меняться, запросы могут проходить через различные сети, а адрес сам по себе не подтверждает целостность payload.

Подпись обычно дает более надежную криптографическую проверку.

Webhook Secret

Webhook Secret — секретное значение, которое знают источник и получатель.

Оно используется для формирования или проверки подписи.

Secret нельзя хранить в открытом Git-репозитории или отправлять в обычные логи.

Для него следует использовать защищенное хранилище секретов или конфигурацию среды исполнения.

Ротация Webhook Secret

Секреты периодически приходится менять, например после подозрения на утечку.

Чтобы не остановить интеграцию, удобно иметь переходный период, когда получатель способен проверить как новый, так и предыдущий ключ.

После обновления всех сторон старый секрет отключается.

Webhook и Backend

Webhook endpoint обычно реализуется на Backend.

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

Backend принимает событие, проверяет его и выполняет бизнес-логику.

Webhook и Frontend

Frontend может косвенно использовать результат Webhook.

Например, после оплаты Backend получает уведомление от платежной системы и меняет статус заказа.

Frontend при следующем запросе получает новый статус или узнает о нем через WebSocket, Server-Sent Events или другой механизм.

Сам платежный сервис обычно не отправляет Webhook напрямую в браузер пользователя.

Webhook и REST API

REST API и Webhook часто строятся на HTTP и JSON, но направление взаимодействия отличается.

REST-клиент сам решает, когда выполнить запрос. Webhook инициирует система, в которой произошло событие.

Практически надежная интеграция нередко использует оба механизма: Webhook сообщает об изменении, а API позволяет получить актуальное полное состояние объекта.

Почему после Webhook иногда полезно запросить API

Webhook payload может содержать только идентификатор и тип события.

Получатель после проверки уведомления обращается к API источника и получает актуальное состояние объекта.

Такой подход уменьшает зависимость от структуры самого Webhook и помогает проверить текущее состояние.

Он также полезен при возможном нарушении порядка событий.

Webhook и платежные системы

Платежи — один из наиболее известных сценариев использования Webhook.

Пользователь может закрыть страницу сразу после оплаты, поэтому нельзя полагаться только на перенаправление браузера обратно в интернет-магазин.

Надежный Backend получает серверное уведомление от платежной системы и только после его проверки меняет статус заказа.

Почему Redirect не заменяет Webhook

После платежа сервис может перенаправить пользователя обратно на сайт.

Но браузер может быть закрыт, сеть потеряна или пользователь вообще не дождался redirect.

Webhook идет между серверами и не зависит от того, открыт ли браузер.

Поэтому для критичного подтверждения платежа серверное уведомление надежнее клиентского перехода.

Webhook и CRM

CRM может использовать Webhooks для интеграции с телефонией, сайтом и другими системами.

Например, после создания сделки CRM отправляет событие внешней системе аналитики.

Или сайт отправляет новую заявку в CRM через API, а CRM позже сообщает Webhook об изменении статуса.

Webhook и интернет-магазин

В электронной коммерции Webhooks связывают платежи, доставку, CRM и учетные системы.

Например, служба доставки отправляет событие shipment.delivered, после которого интернет-магазин автоматически переводит заказ в статус доставлен.

Важно, чтобы изменение статуса было идемпотентным и учитывало возможный неправильный порядок событий.

Webhook и 1С

Webhook может использоваться в интеграциях внешних сервисов с 1С, если архитектура системы предусматривает прием HTTP-запросов.

Например, внешний сервис уведомляет о новом заказе или изменении статуса платежа, после чего промежуточный Backend или интеграционный слой передает данные в учетную систему.

В критичных сценариях важно учитывать доступность 1С, очереди повторной обработки и защиту входящего HTTP endpoint.

Webhook и GitLab

Git-платформы могут отправлять Webhooks при событиях репозитория.

Например, внешняя система получает уведомление после Push, создания Merge Request или другого события проекта.

На основании такого уведомления можно запустить внутреннюю автоматизацию, обновить задачу или синхронизировать данные с другой платформой.

Webhook и CI/CD

Webhooks широко используются для запуска автоматических pipelines.

Например, после Push в Git удаленная CI-система получает событие и начинает сборку приложения.

Так автоматизация запускается непосредственно после изменения кода, а не по расписанию.

Webhook и GitOps

GitOps-система может получать уведомление об изменении Git-репозитория и быстрее инициировать проверку желаемого состояния.

При этом Git остается Source of Truth, а Webhook служит триггером для реакции на изменение.

Даже при потере уведомления GitOps-система обычно должна периодически сверять фактическое состояние с репозиторием.

Webhook и Docker

Сам Webhook не зависит от Docker, но принимающее приложение часто работает в контейнере.

Например, небольшой Backend принимает события платежной системы внутри Docker-контейнера и помещает их в очередь.

Необходимо обеспечить постоянный внешний URL через Reverse Proxy или Load Balancer.

Webhook и Kubernetes

Webhook Receiver можно запускать в Kubernetes как обычный Backend-сервис.

Несколько его реплик позволяют распределять входящие запросы.

При этом дедупликация событий не должна храниться только в памяти одного pod, иначе другая реплика не узнает, что Event ID уже обработан.

Для этого используется общая база данных или другое внешнее хранилище.

Webhook и Serverless

Serverless-функции хорошо подходят для некоторых Webhook-сценариев.

HTTP-запрос автоматически запускает функцию, которая проверяет событие и выполняет небольшую операцию или ставит сообщение в очередь.

Так не нужно постоянно держать отдельный сервер только ради нерегулярных входящих событий.

Однако необходимо учитывать ограничения времени выполнения, холодный старт и модель повторной обработки.

Webhook и Reverse Proxy

Перед Webhook Backend часто находится Nginx или другой Reverse Proxy.

Он принимает HTTPS, ограничивает размер запросов, может выполнять Rate Limiting и передает запрос приложению.

При этом криптографическую проверку подписи обычно выполняет само приложение или специализированный доверенный компонент.

Webhook и API Gateway

API Gateway может выступать внешней точкой входа для Webhooks.

Он маршрутизирует события к нужному сервису, применяет ограничения и ведет часть технического аудита.

Например, Webhooks платежного сервиса направляются в payment-handler, а события доставки — в logistics-handler.

Webhook и Rate Limiting

Rate Limiting защищает Webhook endpoint от аномально большого количества запросов.

Однако лимиты нужно настраивать осторожно: слишком жесткое ограничение может отвергать легитимный поток событий во время пиковой нагрузки.

Также необходимо учитывать повторные попытки источника.

Webhook и DDoS

Публичный Webhook URL доступен из сети и потенциально может стать целью большого количества запросов.

Защита может включать Reverse Proxy, API Gateway, Rate Limiting, сетевые фильтры и масштабирование Backend.

Проверка подписи необходима для бизнес-безопасности, но сама по себе не предотвращает расход ресурсов на входящий вредоносный трафик.

Логирование Webhook

Логирование помогает расследовать проблемы доставки.

Полезно сохранять Event ID, тип события, время получения, результат проверки подписи и статус обработки.

Не следует без необходимости записывать секретные заголовки, токены или полные персональные данные.

Для спорных бизнес-операций полезен отдельный аудит.

Webhook и Observability

При большом количестве интеграций необходимо видеть состояние Webhook-процесса.

Полезными показателями являются количество полученных событий, доля ошибок, время обработки и размер очереди.

Если источник присылает события, но Worker перестал их обрабатывать, обычная проверка HTTP endpoint может этого не заметить.

Метрики Webhook

МетрикаЧто показывает
Received EventsКоличество входящих событий
Error RateДолю событий с ошибкой
Processing LatencyВремя полной обработки
Duplicate RateКоличество повторно доставленных событий
Queue DepthКоличество событий, ожидающих обработки

Webhook и Prometheus

Backend может экспортировать технические показатели Webhook в Prometheus.

Например, количество обработанных payment.succeeded и количество ошибок проверки подписи.

На основании метрик создаются алерты в случае резкого роста ошибок или остановки потока событий.

Webhook и OpenTelemetry

Webhook можно включать в распределенную трассировку.

Полученный HTTP-запрос становится началом или продолжением Trace, после чего можно увидеть работу базы данных, Message Queue и зависимых сервисов.

Это особенно полезно, если одно внешнее событие запускает длинную цепочку внутренних процессов.

Webhook и SLA

Для бизнес-критичных интеграций необходимо понимать гарантии источника.

Важно знать, сколько времени он повторяет события, как долго хранит историю и можно ли вручную повторно отправить уведомление.

Если доставка критична, одной надежды на Webhook недостаточно: обычно нужен механизм сверки состояния через API или периодический reconciliation.

Reconciliation

Reconciliation — периодическая сверка фактического состояния систем.

Например, раз в несколько часов интернет-магазин запрашивает API платежной системы и проверяет, совпадают ли статусы платежей.

Если отдельный Webhook был потерян окончательно, сверка обнаружит расхождение.

Таким образом, Webhook обеспечивает быструю реакцию, а reconciliation повышает надежность интеграции.

Dead Letter Queue

Если событие не удается обработать после нескольких попыток, его полезно переместить в отдельное хранилище неуспешных сообщений.

Такое хранилище часто называют Dead Letter Queue.

Инженер может изучить причину ошибки и запустить повторную обработку после исправления проблемы.

Это особенно важно для финансовых и учетных событий, которые нельзя просто потерять.

Webhook Delivery History

Системе-источнику полезно хранить историю попыток доставки.

Разработчик может увидеть, когда был отправлен запрос, какой HTTP status вернул получатель и выполнялись ли retries.

Такой журнал значительно упрощает диагностику интеграций между независимыми компаниями.

Тестирование Webhook

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

  • повторная доставка одного Event ID;
  • неправильная подпись;
  • устаревший Timestamp;
  • некорректный Payload;
  • недоступность базы данных;
  • повторное изменение статуса;
  • нарушение порядка событий;
  • timeout внешнего сервиса.

Именно такие сценарии чаще всего определяют надежность production-интеграции.

Локальная разработка Webhook

Локальный компьютер разработчика обычно недоступен напрямую из интернета.

Для тестирования используются специальные туннели, тестовые окружения или возможность ручной повторной отправки события со стороны источника.

При использовании внешнего туннеля необходимо учитывать безопасность и не оставлять тестовый endpoint доступным дольше необходимого.

Webhook и тестовое окружение

Платежные и другие внешние сервисы часто предоставляют Sandbox или тестовый режим.

Он позволяет генерировать события без реальных финансовых операций.

Webhook test и production должны иметь отдельные настройки и секреты, чтобы тестовые события случайно не изменяли реальные бизнес-данные.

Типичные ошибки при работе с Webhook

  1. Не проверять подпись события.
  2. Считать, что Webhook приходит только один раз.
  3. Выполнять всю тяжелую обработку внутри HTTP-запроса.
  4. Не использовать Event ID.
  5. Не учитывать изменение порядка событий.
  6. Хранить Webhook Secret в Git.
  7. Отвечать успехом до сохранения события без надежного механизма обработки.
  8. Не вести журнал ошибок.
  9. Не иметь механизма повторной обработки.
  10. Полагаться только на Webhook для критичной финансовой сверки.

Как спроектировать надежный Webhook Receiver

Шаг 1. Использовать HTTPS

Весь трафик должен передаваться через защищенное соединение.

Шаг 2. Проверять подпись

До изменения бизнес-данных необходимо подтвердить подлинность события.

Шаг 3. Проверять Event ID

Повторная доставка не должна повторно выполнять критичную операцию.

Шаг 4. Быстро сохранять событие

Полезно сначала надежно зафиксировать запрос или поставить его в очередь.

Шаг 5. Обрабатывать асинхронно

Тяжелые действия выполняются Worker после подтверждения приема.

Шаг 6. Сделать обработчик идемпотентным

Повторная попытка должна приводить к тому же итоговому состоянию.

Шаг 7. Добавить Observability

Необходимо видеть ошибки, retries, очередь и время обработки.

Шаг 8. Создать процедуру reconciliation

Для критичных данных следует периодически сверяться с системой-источником.

Практический пример

Интернет-магазин принимает оплату через внешний платежный сервис.

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

Платежная система отправляет серверный Webhook payment.succeeded. Backend магазина проверяет HTTPS-запрос и HMAC-подпись.

Затем он проверяет Event ID. Если событие новое, оно сохраняется в базе и помещается в очередь. Backend сразу возвращает успешный HTTP status.

Worker получает событие, запрашивает актуальное состояние платежа через API и переводит заказ в статус Оплачен.

Далее другие фоновые задачи отправляют письмо покупателю и передают заказ на склад.

Если платежная система повторно отправит тот же Webhook, Event ID не позволит выполнить бизнес-операцию второй раз.

Раз в сутки отдельная задача сверяет статусы платежей через API и обнаруживает возможные пропущенные события.

Webhook для бизнеса

Webhooks позволяют исключить множество ручных проверок и ускорить обмен данными между системами.

Заказ может автоматически перейти в обработку после оплаты, CRM — получить изменение статуса, а склад — начать комплектацию.

Для бизнеса это означает сокращение задержек и ручных операций.

Но критичные процессы требуют надежной архитектуры: проверка подписи, идемпотентность, очередь, retries и контроль расхождений должны проектироваться заранее.

Когда нужен Webhook

  • система должна быстро реагировать на внешнее событие;
  • постоянный Polling создает лишнюю нагрузку;
  • нужно получать статусы платежей;
  • есть интеграция с CRM или службой доставки;
  • необходимо запускать автоматизацию после события;
  • используются Git и CI/CD;
  • внешняя система поддерживает callback уведомления;
  • важно уменьшить задержку между событием и реакцией.

Когда Webhook может быть недостаточно

Webhook не является гарантией идеальной доставки.

Если бизнес не может позволить потерять ни одного события, необходимо дополнять механизм очередями, историей доставки и периодической сверкой через API.

Для очень большого внутреннего потока событий также могут лучше подходить Message Broker или Event Streaming платформы.

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

ТерминСвязь с Webhook
APIЧасто используется вместе с Webhook для получения актуального состояния
REST APIРаспространенный HTTP-интерфейс интеграций
HTTPПротокол, через который обычно отправляются Webhooks
PollingАльтернативный способ проверки изменений
Event-driven ArchitectureАрхитектурный подход, основанный на реакции на события
Message QueueИспользуется для надежной внутренней обработки полученных событий
IdempotencyПредотвращает нежелательный результат повторной доставки
HMACМожет использоваться для проверки подписи Webhook
GitLabМожет отправлять Webhooks по событиям репозитория
CI/CDМожет запускаться после получения Webhook
BackendОбычно принимает и обрабатывает Webhook-запросы
ObservabilityПомогает отслеживать доставку и обработку событий

Краткий итог

Webhook — механизм автоматической отправки HTTP-запроса одной системой другой при наступлении события. Он позволяет быстро реагировать на оплату, изменение заказа, действия в Git, события CRM и другие изменения без постоянного Polling.

Надежный Webhook Receiver должен использовать HTTPS, проверять подпись, валидировать Payload и быть готовым к повторной доставке. Для критичных операций особенно важны Event ID и идемпотентность.

Тяжелую обработку желательно выполнять асинхронно через Message Queue и Background Worker. Для финансовых и других критичных данных Webhook полезно дополнять периодической сверкой через API, поскольку сетевые уведомления нельзя считать абсолютной гарантией однократной и строго упорядоченной доставки.

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

6 вопросов
Что такое Webhook?

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

Чем Webhook отличается от API?

При обычной работе с API клиент сам инициирует запрос, когда ему нужны данные. При Webhook инициатором является система, в которой произошло событие: она сама отправляет уведомление на заранее зарегистрированный URL.

Чем Webhook отличается от Polling?

При Polling клиент регулярно проверяет наличие изменений, даже если ничего не произошло. Webhook отправляется только при событии, поэтому позволяет уменьшить количество лишних запросов и быстрее реагировать на изменения.

Почему Webhook нужно обрабатывать идемпотентно?

Одно событие может быть доставлено несколько раз из-за timeout или сетевых ошибок. Идемпотентная обработка и уникальный Event ID помогают избежать повторного создания заказа, начисления бонусов или другой критичной операции.

Как проверить безопасность Webhook?

Обычно используют HTTPS и криптографическую подпись запроса, например HMAC. Также полезно проверять Timestamp, защищаться от Replay Attack, валидировать Payload и хранить Webhook Secret вне исходного кода.

Можно ли использовать Webhook для подтверждения платежа?

Да. Это один из основных сценариев Webhook. Backend получает серверное уведомление платежной системы, проверяет его подлинность и меняет статус заказа. Для повышенной надежности критичные статусы также полезно периодически сверять через API платежного сервиса.

Была ли статья полезна?
Документ обновляется командой EFSOL. Свяжитесь с нами, если нашли неточность.
Нужна консультация?

Поможем спроектировать, развернуть и сопроводить облачную или гибридную инфраструктуру под задачи вашего бизнеса.

Ответим в течение часа в рабочее время
Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.

Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.