Что делать, если сервис доступен только время от времени, соединение между системами работает нестабильно или прямой обмен запросами ограничен сетевыми правилами?
Например:
маршрут между сервисами периодически пропадает;
интернет-провайдер фильтрует часть трафика;
внутренний сервис нельзя открыть для входящих подключений;
изменить настройки корпоративной сети сложно или невозможно;
получатель вебхуков временно бывает недоступен.
В таких ситуациях Adal может выступать надёжным промежуточным транспортом: принять вебхук, сохранить его и доставить в нужную систему, когда это станет возможно.
Важно: Adal не предназначен для обхода блокировок и сетевых политик. Его задача — обеспечить надёжную доставку вебхуков между сервисами с нестабильной или ограниченной связностью. Использование Adal следует согласовать с системным администратором или владельцем сети.
Как это работает
После регистрации в Adal создайте Сервер в разделе «Серверы». Он получит постоянный HTTPS-адрес, который можно указать в сервисе — источнике вебхуков.
Когда на этот адрес приходит запрос, Adal:
принимает и сохраняет вебхук;
показывает его в интерфейсе для просмотра и аудита;
передаёт запрос в настроенные конечные точки;
при необходимости повторяет попытки доставки.
В разделе Destinations можно добавить одного или нескольких получателей. Adal поддерживает два способа доставки: через Adal CLI и напрямую по HTTP.
Доставка через Adal CLI
Adal CLI — приложение с открытым исходным кодом, которое запускается на компьютере или сервере пользователя. Оно доступно для большинства популярных операционных систем и архитектур.
После запуска Adal CLI устанавливает исходящее защищённое WebSocket-соединение с Adal и ожидает новые вебхуки. Когда Сервер получает запрос, он передаёт его в CLI, а приложение доставляет запрос на указанный локальный адрес.
Например, вебхуки можно перенаправлять на:
приложение, запущенное на компьютере разработчика;
тестовый сервер внутри локальной сети;
внутренний сервис без публичного IP-адреса;
приложение за NAT или корпоративным маршрутизатором.
Для этого не нужно открывать входящие порты, настраивать переадресацию на роутере или получать публичный IP-адрес. Соединение устанавливает сам Adal CLI, поэтому для сети оно является исходящим.
Если локальный получатель временно недоступен, Adal повторит доставку. Количество автоматических попыток настраивается отдельно для каждой конечной точки.
Если все попытки закончатся, а получатель так и не появится в сети, доставку можно будет запустить вручную. Это возможно, пока исходный вебхук хранится в Adal.
Доставка через Direct HTTP
Direct HTTP подходит, если принимающий сервис доступен из интернета, но прямое соединение между отправителем и получателем работает нестабильно или не может быть установлено.
В этом режиме Adal принимает вебхук, сохраняет его и отправляет непосредственно на указанный HTTPS-адрес. Запрос передаётся в исходном виде. Adal принудительно добавляет своё обозначение в заголовок User-Agent, чтобы доставка оставалась прозрачной, а жалобы на нежелательные или вредоносные запросы можно было расследовать.
Для Direct HTTP принимающий сервис должен иметь публичный адрес, доступный из интернета. Если он временно не отвечает, Adal повторит отправку в соответствии с настройками конкретной конечной точки.
Если получатель остаётся недоступным и автоматические попытки заканчиваются, вебхук не теряется. Пока он хранится в Adal, пользователь может вручную перезапустить его доставку.
Например, платёжный сервис отправил уведомление, но ваш обработчик в этот момент был недоступен. Adal примет и сохранит уведомление, а затем выполнит настроенные попытки доставки. Если обработчик не успеет вернуться в сеть, доставку можно будет повторить вручную после восстановления его работы.
Хранение и повторная доставка
Все принятые вебхуки сохраняются в Adal на установленный срок. В течение этого времени их можно:
просматривать;
использовать для аудита и диагностики;
повторно отправлять в одну или несколько конечных точек;
вручную перезапускать неудавшуюся доставку после восстановления получателя.
Ручная доставка доступна независимо от того, сколько автоматических попыток уже было выполнено. Главное условие — вебхук ещё должен находиться в пределах срока хранения.
После окончания этого срока вебхуки удаляются без возможности восстановления. Перезапустить их доставку после удаления уже нельзя.
Содержимое вебхуков хранится в зашифрованном виде и доступно только пользователю, которому принадлежит соответствующий Сервер. Adal не продаёт, не раскрывает и не использует эти данные для других целей. Они обрабатываются только для хранения и доставки в конечные точки, настроенные пользователем.
Что в итоге
Adal помогает отделить получение вебхука от его фактической обработки. Даже если конечный сервис временно недоступен, входящий запрос не потеряется: Adal примет его, сохранит и выполнит настроенные попытки доставки.
Если автоматических попыток окажется недостаточно, доставку можно перезапустить вручную — при условии, что вебхук ещё хранится в Adal.
Если принимающий сервис находится в локальной сети или не имеет публичного IP-адреса, можно использовать Adal CLI. Если сервис доступен из интернета, подойдёт Direct HTTP.