Что такое веб-хуки, как они работают и почему такая асинхронная интеграция систем через HTTP-вызовы все равно может рассматриваться как синхронное взаимодействие.
Что такое веб-хуки и как они работают
Веб-хук (Webhook) – это еще один способ интеграции информационных систем по веб-API. Суть такого веб-перехватчика не новая – он представляет собой просто обратный HTTP-вызов из системы-источника к системе-приемнику. Это удобно для асинхронной интеграции в рамках событийного обмена данными, т.е. не по расписанию. Вместо синхронного взаимодействия в стиле запрос-ответ система-приемник НЕ обращается к системе-источнику за новыми данными, а источник сам вызывает приемник при их возникновении. Это сокращает нагрузку на сеть, позволяя избежать периодических и безрезультатных обращений приемника к источнику за новыми данными.
Когда в системе-источнике происходит новое событие, она уведомляет систему-приемник, обращаясь к ней через HTTP-запрос по URL-адресу приемника. На UML-диаграмме последовательности это выглядит так:
Скрипт PlantUML для этой диаграммы:
@startuml title Интеграция через веб-хуки participant "Система-источник" AS I participant "Система-приемник" AS P I->I: создать \nсобытие() I -\P : отправить \nданные о \nсобытии() P->P: обработать событие() @enduml
В описании принципов работы межсистемной интеграции через веб-хуки я намеренно использую термины Система-Источник и Система-Приемник вместо Клиент и Сервер, поскольку обычно клиентом считается тот, кто инициирует взаимодействие. Однако, в случае веб-хуков инициатором взаимодействия является Сервер, т.е. Система-Источник данных, посылая их Клиенту без его фактического запроса. Чтобы показать, как это работает, далее рассмотрим пару примеров.
Примеры интеграции через веб-хуки
Поскольку веб-хуки часто используются для генерации уведомлений, в качестве 1-го примера возьмем генерацию сообщений в ТГ-бот о том, что появился новый ответ в сервисе Yandex Forms. Для этого я создала форму и в настройке интеграций добавила действие отправки GET-запроса по адресу https://api.telegram.org/bot{TOKEN}/sendMessage?chat_id={chat_id}&text={txt}, где вместо переменных {TOKEN} и {chat_id} заданы токен и идентификатор моего заранее созданного телеграмм-бота, а также текст сообщения.
После заполнения формы текст о том, что появился новый ответ на форму, ушел в ТГ-бот. Информация об результатах отправки также доступна в логе выполненных интеграций Yandex Forms.
В качестве второго примера я решила создать веб-хук на события добавления/удаления/изменения товаров в интернет-магазине на своей базе PostgreSQL, интегрированной с веб-платформой Hasura. Этот веб-хук также будет посылать уведомления в телеграмм-бот.
После создания событийных триггеров на таблицу product и выполнения операций мутации, т.е. вставки, изменения и удаления записей, уведомления об этом приходят в ТГ-бот.
При этом система-приемник, будучи веб-сервером, выдает ответ на сообщение от системы-источника. Таким образом, веб-хуки хоть и считаются средством асинхронной интеграции, взаимодействие между отправителем и получателем сообщения все равно выполняется в стиле запрос-ответ. При этом можно установить количество попыток повторной отправки сообщения, если система-приемник будет временно недоступна. Это будет реализовано на основе статуса HTTP-ответа от системы-приемника. Поэтому такой способ хорошо подходит для эпизодической генерации и отправки уведомлений о событиях одной системы в другую. Отправляемые при этом данные не должны быть слишком большими. А если нужно передать какую-то чувствительную информацию, следует делать это в POST-запросе, установив параметры аутентификации, которые ожидает система-приемник.
Поскольку веб-хуки являются простыми HTTP-вызовами, интеграция систем с их помощью возможна только при возможности отправить HTTP-запрос из системы-источника к системе-приемнику, указав URL-адрес ее веб-сервера. При его отсутствии использовать такой способ для межсистемного взаимодействия не получится.
Основы архитектуры и интеграции информационных систем
Код курса
OAIS
Ближайшая дата курса
5 ноября, 2024
Продолжительность
16 ак.часов
Стоимость обучения
36 000 руб.
Узнайте больше про архитектуру и интеграцию информационных систем на моих курсах в Школе прикладного бизнес-анализа в нашем лицензированном учебном центре обучения и повышения квалификации системных и бизнес-аналитиков в Москве: