словарь · 14.09.26 · 2 мин чтения
Вебхук
Адрес, куда чужой сервис сам присылает сообщение о событии. Чем это лучше опроса по расписанию и что обязательно проверять.
Вебхук - адрес на вашем сервере, куда чужой сервис сам присылает сообщение, когда у него что-то произошло: пришёл платёж, появился комментарий, клиент подписался. Вы не спрашиваете сервис по расписанию «есть ли новое?», он сам стучится в момент события.
Разница с опросом видна на цифрах. Мой сторож комментариев на ноутбуке обходит площадки каждые две минуты, и в лучшем случае комментарий ждёт до двух минут, а если ноутбук спит, то и часы. Приёмник вебхука на сервере получает тот же комментарий за секунды, и сервер не спит. Для оплаты это ещё важнее: касса присылает вебхук об успешном платеже, и доступ клиенту открывается сразу, без человека, который проверяет поступления руками.
Практическое следствие: у вебхука две обязательные проверки, без которых он опасен. Первая - подпись: сервис подписывает сообщение секретом, и сервер обязан сверить подпись, иначе любой, кто узнал адрес, пришлёт «платёж прошёл» и получит доступ бесплатно. Вторая - дубли: сервисы присылают одно и то же событие повторно, если не получили подтверждения, поэтому каждое сообщение записывается в журнал входящих, и повторное не обрабатывается второй раз. У платформы, на которой вы это читаете, оба правила стоят в конституции проекта, и разбор её сборки есть в статье про сайт с оплатой и кабинетом.
Ещё одна деталь: вебхуку нужен адрес, который не меняется. Временный туннель с ноутбука меняет адрес при перезапуске, сервис продолжает стучаться по старому, и тишина выглядит как «никто не пишет».
Что делать. Если сервис умеет вебхуки, брать их, а опрос по расписанию оставлять подстраховкой. Проверять подпись, вести журнал входящих, держать приёмник на сервере с постоянным адресом. Как две машины, вебхук и опросник, поделили между собой площадки, разобрано в статье про сторожа комментариев.
Журнал - про системы, которые работают у меня каждый день. Что похожее можно собрать под ваш бизнес - на странице услуг.