Webhook: что это, как работает и чем отличается от API

Webhook — это способ оповещения клиента о событии в системе с помощью обратных вызовов HTTP. Он запускается при возникновении события на сайте, в чат-боте или другой системе (например, добавление комментария или товара). Сервер создаёт HTTP-вызов и отправляет его на адрес, указанный клиентом. Клиент получает актуальные данные, обеспечивая удобство пользователя.

Webhook vs. API

Большинство API работают по принципу «запрос-ответ». Клиент постоянно отправляет запросы на сервер. Webhook работает иначе: сервер сам сообщает клиенту о важных событиях.

Схема работы:

  • API: Клиент регулярно опрашивает сервер на наличие изменений. Сервер отвечает о наличии или отсутствии изменений.
  • Webhook: Сервер оповещает клиента о появлении нужной информации. Постоянные запросы не требуются.

Проще говоря, webhook — это подписка на обновления для определённых событий. Сервер оповещает клиента только о нужных изменениях. Это упрощает обмен данными для клиента и провайдера. Webhook — это обратный вызов, не требующий сложной инфраструктуры.

Как работают Webhook’и?

Сервер оповещает клиента при появлении нужной информации. Обычно webhook использует POST-запрос. Клиент интерпретирует его самостоятельно, используя интерфейс взаимодействия с POST-запросами. Пользователь определяет, при каких событиях сервер должен отправлять уведомления. Webhook передаёт данные клиенту, который их обрабатывает.

В отличие от API, где адреса для запроса данных предоставляет сервер, webhook инициируется сервером.

Пример запросов API:

  • Создание сообщения: POST /messages
  • Просмотр сообщения: GET /messages/{id}
  • Создание комментария: POST /messages/{id}/comments
  • Просмотр комментария: GET /comments/{id}

URL формирует клиент. При важном событии он использует эти URL для отправки оповещения.

Например, пользователь хочет получать уведомления о новых сообщениях. Он настраивает webhook. При публикации сообщения сервер вызывает адрес webhook’а, и клиент получает уведомление.

Структура Webhook’а

Webhook — это код, обычно состоящий из переменных и данных. Например: firstName (переменная) и Антон (данные). Количество переменных зависит от системы. Система обычно генерирует код и отправляет его на указанный клиентом адрес, отображаемый в графическом интерфейсе.

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

Webhook’и используются в:

  • GitLab/GitHub: Оповещения о новых сообщениях, обновлениях и других событиях.
  • Системах управления торговлей: Оповещения о создании заказов, изменении статусов, цен, контактных данных и т.д.
  • Системах коллтрекинга: Оповещения о звонках, email, заявках или сообщениях в чате.

Поставщики данных предоставляют интерфейс для создания webhook’ов: указание URL, выбор событий и параметров. Пользователь заполняет форму, а поставщик отвечает за программную часть.

Создание и тестирование тестового Webhook’а

Для проверки входящего запроса можно использовать webhook.site. Он генерирует URL для отправки POST-запросов.

Проверка с GitHub:

  1. Получить и скопировать URL с webhook.site.
  2. Оставить страницу сервиса открытой.
  3. Настроить новый webhook в GitHub, указав URL, Content-Type: application/json и событие (например, комментарий).
  4. Оставить комментарий и проверить webhook.site.
  5. POST-запрос должен быть отправлен на указанный URL.

Отладка и Безопасность Webhook’ов

Отладка webhook’ов сложна из-за асинхронной модели. Сервисы, такие как Pipedream, Postman, ngrok и RequestBin, упрощают этот процесс.

Использование публичного URL небезопасно. Для повышения безопасности:

  1. Использовать HTTPS.
  2. Генерировать URL с уникальными токенами.
  3. Использовать базовую аутентификацию (Basic Auth).
  4. Работать с поставщиками, которые подписывают запросы ключом.

Что нужно помнить

  • Потеря данных: Возможна потеря данных из-за ошибок на стороне сервиса. Необходимо предусмотреть падение приложения и узнать, как поставщик обрабатывает ответы и создает ли резервные копии.
  • Нагрузка: Приложение может не выдержать нагрузку. Не стоит передавать большие объемы данных через webhook. Используйте его для уведомлений, а затем, получив сигнал, запрашивайте данные через API.

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

Что будем искать? Например,программа