Шпаргалка: Вебхуки для тестировщика

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

Что такое Вебхук? (И чем он отличается от 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 вебхуков за секунду? Справится ли ваш сервис с нагрузкой?
  • Проверка идемпотентности: Что произойдет, если источник по какой-то причине отправит один и тот же вебхук дважды? Ваш сервис не должен создавать дубликаты (например, дважды списывать деньги или отправлять два одинаковых письма).

Как тестировать вебхуки вручную: пошаговая симуляция

  1. Получите URL-адрес слушателя.
    Используйте сервис вроде webhook.site, который предоставит вам временный URL для приема запросов. Скопируйте его.
  2. Настройте вебхук в исходной системе.
    В настройках приложения (например, GitLab) вставьте свой URL и выберите нужные события.
  3. Спровоцируйте событие.
    Нажмите кнопку "Спровоцировать событие", чтобы симулировать, как внешний сервис (например, Stripe) отправляет данные на ваш URL после успешной оплаты.
  4. Проверьте результат.
    Убедитесь, что в симуляторе приемника появились корректные данные (payload) о событии.

1. Ваш уникальный URL-слушатель:

https://webhook.site/a1b2c3d4-e5f6...
2. Статус: Ожидание события от внешнего сервиса...
Здесь появятся данные (payload)...