Вебхуки (англ․ webhooks) – это механизм обратного вызова, позволяющий серверу автоматически отправлять данные клиенту (или другому серверу) в момент наступления определённого события․ В отличие от традиционного API, где запрос инициирует клиент, вебхук «прокладывает» путь от сервера‑источника к получателю․
Содержание
- Что такое вебхук?
- Типы вебхуков: входящие и исходящие
- Архитектура сайта управления вебхуками
- Права доступа и роли пользователей
- Создание и настройка вебхука
- Редактирование, тестирование и удаление
- Безопасность и защита от подделки
- Интеграция с популярными сервисами
- Мониторинг, логирование и отладка
- Лучшие практики
- FAQ
- Контактные данные
Что такое вебхук?
Вебхук – это HTTP‑запрос (обычно POST), который автоматически отправляется сервером‑источником в ответ на событие (создание задачи, изменение статуса, загрузка файла и т․д․)․ Получатель обрабатывает запрос и может выполнить любые действия: записать данные в БД, отправить уведомление, запустить бизнес‑процесс и т․п․
Ключевые особенности
- Реальное время – данные приходят сразу после события․
- Низкая нагрузка – сервер‑источник не ждёт ответа от клиента, просто «выстреливает» запрос․
- Гибкость – любой HTTP‑эндпоинт может стать получателем․
Типы вебхуков: входящие и исходящие
| Тип | Краткое описание | Пример использования |
|---|---|---|
| Входящие (Incoming) | Сервис принимает запросы от внешних систем․ | Получение уведомлений от платежного шлюза․ |
| Исходящие (Outgoing) | Сервис отправляет запросы во внешние системы․ | Отправка данных о новой задаче в Slack․ |
Архитектура сайта управления вебхуками
Современный сайт управления вебхуками состоит из нескольких слоёв:
- Frontend – UI, построенный на React/Vue/Angular, где пользователь создает, редактирует и тестирует вебхуки․
- API‑gateway – слой, принимающий запросы от UI и от внешних систем (вебхуков)․ Реализован на
Node․jsилиFastAPI․ - Сервис бизнес‑логики – проверка прав, валидация payload, запись в базу․
- База данных – хранит конфигурацию вебхуков (URL, метод, заголовки, подписи)․
- Worker‑queue – очередь (RabbitMQ, Kafka) для асинхронной отправки исходящих запросов․
- Лог‑хранилище – Elasticsearch/Graylog для аудита и отладки․
Ниже – упрощённая схема:
+-------------------+ +-------------------+ +-------------------+
| UI (React) | ---> | API‑Gateway | ---> | Business Logic |
+-------------------+ +-------------------+ +-------------------+
| |
v v
+-------------------+ +-------------------+
| Queue (RabbitMQ) | | DB (PostgreSQL) |
+-------------------+ +-------------------+
|
v
+-------------------+
| Worker (Python) |
+-------------------+ |
v
+-------------------+
| External Service |
+-------------------+
Права доступа и роли пользователей
Как показано в официальной документации ArcGIS Enterprise и Portal for ArcGIS, управление вебхуками доступно только пользователям с определёнными ролями:
- Геообработка – роль, позволяющая создавать и редактировать сервисы геообработки․
- Администратор (по умолчанию) – полный доступ к настройкам сайта․
- Издатель – может создавать вебхуки, но не управлять системными настройками․
Внутри сайта часто реализуется следующая матрица прав:
| Роль | Создание | Редактирование | Удаление | Просмотр логов |
|---|---|---|---|---|
| Администратор | ✓ | ✓ | ✓ | ✓ |
| Издатель | ✓ | ✓ | ✗ | ✗ |
| Геообработка | ✓ | ✓ | ✓ | ✗ |
Создание и настройка вебхука
Процесс создания вебхука в UI обычно выглядит так:
- Авторизоваться в системе (по логину/паролю или SSO)․
- Перейти в раздел Сервисы → ServiceName → Вебхуки → Добавить вебхук․
- Заполнить форму:
- Имя вебхука – произвольное название․
- URL‑адрес получателя –
https://example․com/webhook․ - Метод –
POST(режеGET,PUT)․ - Заголовки – например,
Authorization: Bearer *․ - Тело сообщения – шаблон JSON с плейсхолдерами (например,
{ "taskId": "{{task․id}}" })․ - Подпись (Signature) – секретный токен, который будет добавлен в
X-Signature․ - Триггер – событие, которое будет инициировать отправку (создание, обновление, удаление)․
- Сохранить и протестировать (кнопка Тестировать отправит запрос с тестовыми данными)․
Пример JSON‑шаблона для вебхука, отправляющего данные о новой задаче:
{
"event": "task․created",
"task": {
"id": "{{task․id}}",
"": "{{task․}}",
"assignee": "{{task․assignee}}",
"createdAt": "{{task․created_at}}"
}}
Редактирование, тестирование и удаление
После создания вебхука его можно изменить:
- Нажать Редактировать рядом с нужным вебхуком в списке․
- Обновить URL, заголовки, тело сообщения или переключить триггер․
- Сохранить изменения – система автоматически перезапишет конфигурацию в базе․
Для проверки корректности работы используется Тестовый запрос․ В UI отображается ответ сервера (статус, тело, заголовки) и сохраняется в журнале․
Удаление вебхука производится через кнопку Удалить․ При этом в журнале сохраняется запись о событии удаления (кто, когда)․
Безопасность и защита от подделки
Вебхуки открывают путь для внешних запросов, поэтому необходимо обеспечить их безопасность:
- Подпись (HMAC‑SHA256) – сервер‑источник добавляет в
X-Signatureхеш от тела сообщения с использованием секретного токена․ Получатель проверяет подпись․ - IP‑whitelist – в настройках вебхука можно указать диапазоны IP‑адресов, с которых разрешено принимать запросы․
- HTTPS – обязательное использование TLS (порт 443) для шифрования данных․
- Тайм‑стамп – включение заголовка
X-Timestampи проверка, что запрос не старше, например, 5 минут․ - Ограничение частоты – система может отклонять запросы, превышающие
RPS(запросов в секунду)․
Пример кода проверки подписи на Node․js:
const crypto = require('crypto');
function verifySignature(req) {
const signature = req․headers['x-signature'];
const secret = process․env․WEBHOOK_SECRET; // ваш секрет
const payload = JSON․stringify(req․body);
const hash = crypto․createHmac('sha256', secret)․update(payload)․digest('hex');
return crypto․timingSafeEqual(Buffer․from(signature), Buffer․from(hash));
}
Интеграция с популярными сервисами
Вебхуки часто используют в связке с платформами автоматизации:
- Zapier – позволяет без кода соединять вебхуки с более чем 3000 приложений․
- Make (ранее Integromat) – визуальный конструктор сценариев, поддерживает фильтры и трансформацию данных․
- Microsoft Power Automate – интеграция в экосистеме Microsoft 365․
- IFTTT – простейшие триггеры «если‑то»․
- Albato – российская платформа для омниканальной автоматизации․
Пример цепочки в Zapier:
- Триггер: Incoming Webhook (получаем POST‑запрос)․
- Фильтр: проверяем, что
event = "order․created"․ - Действие: создаём запись в Google Sheets․
- Действие: отправляем сообщение в Slack․
Мониторинг, логирование и отладка
Для надёжной эксплуатации сайта управления вебхуками необходимо вести детальный журнал:
- Запросы – время, URL, статус, тело, заголовки․
- Ошибки доставки – повторные попытки, коды 5xx, тайм‑ауты․
- Метрики – количество отправленных запросов, среднее время отклика, процент ошибок․
В UI часто реализованы:
- Таблица Логи вебхуков с фильтрами по дате, статусу, сервису․
- Графики в реальном времени (Prometheus + Grafana)․
- Уведомления по email/SMS при превышении пороговых значений․
Лучшие практики
- Минимизировать payload – передавайте только необходимые поля․
- Версионировать вебхуки – добавляйте в URL версию, например
/v1/webhook, чтобы в будущем менять схему без поломки клиентов․ - Обрабатывать ретраи – ваш обработчик должен быть идемпотентным (не создавать дубликаты при повторных запросах)․
- Тестировать в изолированной среде – используйте сервисы webhook․site или RequestBin для отладки․
- Документировать события – поддерживайте справочник событий с описанием полей и примерами․
- Ограничить доступ по IP – если получатель известен, указывайте whitelist․
- Шифровать секреты – храните токены в секретных хранилищах (Vault, AWS Secrets Manager)․
FAQ
Чем вебхук отличается от обычного API?
API – клиент запрашивает данные, вебхук – сервер отправляет их без запроса․
Как проверить, что вебхук действительно пришёл от моего сервера?
Проверяйте подпись (HMAC), IP‑адрес и тайм‑стамп․
Что делать, если получатель не отвечает?
Система должна делать экспоненциальные ретраи (например, 1 мин, 5 мин, 15 мин, 1 ч) и после 5‑ти неудач помечать вебхук как «недоставлен»․
Можно ли отключить вебхук временно?
Да, в UI обычно есть переключатель «Активен/Неактивен»․
Как масштабировать отправку тысяч вебхуков в секунду?
Используйте очередь сообщений (RabbitMQ, Kafka) и несколько воркеров, а также распределённый CDN для статических ресурсов․
Контактные данные
Если у вас возникли вопросы по настройке сайта управления вебхуками, вы можете связаться с нашей поддержкой:
- Ответственный менеджер: Иванов Иван * (email: ivan․ivanov@example․com)
- Техническая поддержка: +7 (495) — (доступна 24/7)
- Офис: ул․ Пушкина, д․ 10, офис 5, г․ Москва, 101000, Россия
- Служба поддержки (online): https://support․example․com
Для получения более детальной документации посетите наш раздел «Вебхуки»․
Дата последнего обновления статьи: 02:26:24