Ответ
Вебхук (Webhook) — это механизм обратного вызова на основе HTTP, реализующий модель "push-уведомлений". При наступлении события в системе-источнике (например, новый коммит в репозитории) она отправляет HTTP-запрос (обычно POST с JSON-телом) на заранее заданный URL системы-получателя.
| Сравнение с API-запросом: | Аспект | Классический API (Polling) | Вебхук (Push) |
|---|---|---|---|
| Инициатор | Клиент опрашивает сервер. | Сервер уведомляет клиента. | |
| Эффективность | Частые пустые опросы тратят ресурсы. | Данные отправляются только при событии. | |
| Реальное время | Задержка равна интервалу опроса. | Минимальная задержка. |
Пример обработки вебхука на Node.js:
app.post('/github-webhook', express.json(), (req, res) => {
const signature = req.headers['x-hub-signature-256'];
// 1. ВАЖНО: Проверить подпись для безопасности
if (!verifySignature(signature, req.body)) {
return res.status(401).send('Invalid signature');
}
// 2. Обработать событие
const event = req.headers['x-github-event'];
if (event === 'push') {
console.log(`New push to: ${req.body.repository.full_name}`);
// Запустить сборку или тесты...
}
res.status(200).end(); // Всегда отвечать успешно
});
Типичные сценарии использования: уведомления об оплате (Stripe), запуск CI/CD (GitHub/GitLab), синхронизация данных (Slack), обновления чат-ботов.