раздел 02

Webhook: обратный вызов

Webhook работает наоборот по сравнению с API. Здесь не вы спрашиваете - сервис сам присылает вам уведомление, когда у него что-то произошло. Вам не нужно дёргать его и переспрашивать: случилось событие - вам сообщили.

Аналогия - доставка пиццы. С API вы каждые пять минут звоните в пиццерию: «уже выехал курьер? а сейчас? а сейчас?». С webhook вы дали свой номер и спокойно занимаетесь делами - курьер сам позвонит в дверь, когда приедет.

Push против pull

Это две противоположные модели передачи данных.

API - pull
вы спрашиваете
  • -Инициатор - вы.
  • -Вы дёргаете сервис, когда вам нужно.
  • -Чтобы не пропустить событие, приходится спрашивать снова и снова.
  • -Хорошо, когда данные нужны по запросу.
Webhook - push
вам сообщают
  • -Инициатор - сервис.
  • -Он сам стучится к вам, когда наступает событие.
  • -Ничего переспрашивать не надо - узнаёте сразу.
  • -Хорошо, когда важно реагировать на событие мгновенно.

Как это устроено

1
Вы даёте сервису свой адрес
URL вашего сервера - это как оставить номер телефона, по которому с вами свяжутся.
2
Сервис ждёт события
Например, поступления оплаты. Пока события нет - тишина.
3
Событие случилось - сервис стучится к вам
Он сам отправляет запрос на ваш URL с данными о том, что произошло.
4
Ваша программа реагирует
Получив уведомление, она помечает заказ оплаченным, шлёт чек, запускает сборку.

Пример с оплатой

Клиент оплатил заказ через платёжный сервис. Сервису нужно сообщить вашему магазину: «оплата по заказу 1024 прошла». Он дёргает заранее заданный URL вашего магазина и передаёт эти данные. Магазин получает webhook, помечает заказ оплаченным и отправляет покупателю чек.

Без webhook вашему магазину пришлось бы каждую минуту спрашивать платёжный сервис: «оплата уже прошла?» - и так по каждому заказу. С webhook сервис сам сообщает в нужный момент.