Что такое Вебхук? (И чем он отличается от API)
Вебхук (Webhook) — это механизм, который позволяет одной системе (серверу) автоматически уведомлять другую систему (клиента) о произошедшем событии. Это "push"-модель: сервер сам проталкивает информацию клиенту, как только она появляется.
Это отличается от классической "pull"-модели API, где клиент вынужден постоянно опрашивать сервер: "Есть что-нибудь новое?".
Ключевые компоненты и практическое применение
Из чего состоит Вебхук?
- URL-адрес слушателя (Endpoint): Уникальный URL в вашем приложении, который ожидает входящие данные от внешнего сервиса.
- Событие (Event): Действие, которое запускает отправку вебхука. Например:
payment.succeeded
,repo.push
,lead.created
. - Полезная нагрузка (Payload): Данные о событии, которые отправляются в теле POST-запроса, обычно в формате JSON.
Пример реального вебхука (Payload)
Вот как может выглядеть тело (payload) вебхука от платежной системы Stripe. Наведите на любой элемент, чтобы узнать его назначение.
{
"type": "payment_intent.succeeded",
"id": "evt_1J...",
"data": {
"object": {
"id": "pi_3J...",
"amount": 1500,
"currency": "usd",
"customer": "cus_K..."
}
},
"created": 1630000000
}
Где вы сталкиваетесь с вебхуками?
- Платежные системы (Stripe, PayPal): Когда вы совершаете онлайн-платеж, платежная система отправляет вебхук интернет-магазину с сообщением "Оплата прошла успешно".
- CI/CD (Jenkins, GitLab): Когда вы отправляете код в репозиторий (
git push
), GitLab отправляет вебхук в Jenkins, чтобы тот автоматически запустил сборку проекта. - Мессенджеры (Telegram, Slack): Чат-боты получают новые сообщения через вебхуки. Как только кто-то пишет боту, Telegram отправляет вебхук на ваш сервер.
- CRM-системы: Когда в CRM появляется новый лид, она может отправить вебхук в сервис email-рассылок, чтобы автоматически отправить приветственное письмо.
Эффективные стратегии тестирования
Тестирование вебхуков требует проверки не только того, "пришло ли что-то", но и "что именно пришло и как система на это отреагировала".
- Проверка Payload (полезной нагрузки): Убедитесь, что в полученном JSON есть все обязательные поля. Проверьте типы данных. Попробуйте спровоцировать события с граничными значениями (например, покупка на 0 рублей или с очень длинным именем товара).
- Проверка безопасности: Хороший вебхук должен быть защищен. Проверьте, что ваш сервис проверяет подпись (signature) или секретный ключ в заголовках, чтобы убедиться, что запрос пришел из доверенного источника, а не от злоумышленника.
- Проверка надежности и производительности: Что будет, если ваш сервис-получатель временно недоступен? Отправит ли источник вебхук повторно? Что будет, если источник отправит 100 вебхуков за секунду? Справится ли ваш сервис с нагрузкой?
- Проверка идемпотентности: Что произойдет, если источник по какой-то причине отправит один и тот же вебхук дважды? Ваш сервис не должен создавать дубликаты (например, дважды списывать деньги или отправлять два одинаковых письма).
Как тестировать вебхуки вручную: пошаговая симуляция
- Получите URL-адрес слушателя.
Используйте сервис вроде webhook.site, который предоставит вам временный URL для приема запросов. Скопируйте его. - Настройте вебхук в исходной системе.
В настройках приложения (например, GitLab) вставьте свой URL и выберите нужные события. - Спровоцируйте событие.
Нажмите кнопку "Спровоцировать событие", чтобы симулировать, как внешний сервис (например, Stripe) отправляет данные на ваш URL после успешной оплаты. - Проверьте результат.
Убедитесь, что в симуляторе приемника появились корректные данные (payload) о событии.
1. Ваш уникальный URL-слушатель: