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:
- Получить и скопировать URL с webhook.site.
- Оставить страницу сервиса открытой.
- Настроить новый webhook в GitHub, указав URL, Content-Type: application/json и событие (например, комментарий).
- Оставить комментарий и проверить webhook.site.
- POST-запрос должен быть отправлен на указанный URL.
Отладка и Безопасность Webhook’ов
Отладка webhook’ов сложна из-за асинхронной модели. Сервисы, такие как Pipedream, Postman, ngrok и RequestBin, упрощают этот процесс.
Использование публичного URL небезопасно. Для повышения безопасности:
- Использовать HTTPS.
- Генерировать URL с уникальными токенами.
- Использовать базовую аутентификацию (Basic Auth).
- Работать с поставщиками, которые подписывают запросы ключом.
Что нужно помнить
- Потеря данных: Возможна потеря данных из-за ошибок на стороне сервиса. Необходимо предусмотреть падение приложения и узнать, как поставщик обрабатывает ответы и создает ли резервные копии.
- Нагрузка: Приложение может не выдержать нагрузку. Не стоит передавать большие объемы данных через webhook. Используйте его для уведомлений, а затем, получив сигнал, запрашивайте данные через API.
Webhook — альтернатива API для проверки изменений данных. В отличие от API, где клиент опрашивает сервер, webhook работает в обратном порядке: сервер оповещает клиента. Webhook’и используются повсеместно, и для упрощения работы часто предоставляются специальные панели управления. Важно помнить о безопасности и потенциальной потере данных.