Что такое вебхук (Webhook) и как он работает?

Ответ

Вебхук (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), обновления чат-ботов.

Ответ 18+ 🔞

А, слушай, вебхуки, блядь! Это ж такая штука, когда система, вместо того чтобы ты её по сто раз на дню дергал, сама прибегает и кричит: «Э, сабака сука, у меня тут событие случилось, держи!»

Представь, ты сидишь, чай пьёшь, а тебе в дверь почтальон стучится с посылкой. Это и есть вебхук. А классический API — это ты сам, как охуевший, каждые пять минут бегаешь на почту и спрашиваешь: «А посылка есть? А щас? А может, уже есть?». Ресурсов дохуя, а толку — ноль, пока событие не случится.

Короче, в чем разница:

Чё да как Классический API (Ты долбишь сервер) Вебхук (Сервер сам прибегает)
Кто первый начинает Ты, бедолага, опрашиваешь. Сервер, когда у него чешется.
Эффективность Овердохуища пустых запросов, трафик, нагрузка. Данные летят только когда есть что сказать.
Скорость реакции Зависит от того, как часто ты дергаешься. Практически мгновенно, пиздец как быстро.

Вот тебе пример, как эту хуйню ловить на 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): «Э, чувак, деньги пришли, можешь выдать доступ».
  • Сборки (GitHub/GitLab): «Код залили — начинай собирать, нехуй спать!».
  • Чаты (Slack): «Тебе сообщение пришло, волнение ебать!».
  • Боты: «Кто-то написал команду, иди работай, мудя».

Короче, вебхук — это когда система не заставляет тебя бздеть в ожидании, а сама приходит и кладёт информацию прямо в твои объятия. Удобно, ебать мои старые костыли!