Webhook

В этой статье мы поговорим про Webhook. Эта тема тесно связана с понятием Polling. Если вы не знаете, что это такое — у нас уже есть отдельная статья о Polling.

Напомним, что Polling — это когда клиент всё время спришвает у сервера "есть что-нибудь новенькое?", а сервер присылает события (например, новые сообщения) или пишет, что ничего не происходило.

Webhook — это то же самое, только наоборот. Теперь если что-то случается (например, новое сообщение) — сервер сам пишет клиенту:

Давайте рассмотрим схему подробнее. Есть 2 основных действующих лица: клиент и сервер уведомлений. Как только вашему боту написал пользователь — сервер уведомлений шлёт вам JSON-объект, где указывает кто писал, что писал и так далее. Дальше клиент сам решает, как на это сообщение отреагировать. Он может прислать одно сообщение, может несколько, а может вообще промолчать. В конце он отвечает серверу "Ок, 200", обозначая этим, что запрос обработан.

Чтобы клиент мог писать в ответ, обычно создаётся отдельное API, где реализованы запросы на отправку сообщений и так далее. API и сервер уведомлений — это обычно одна та же соцсеть, просто разные микрсервисы. Один занимается только рассылкой уведомлений, другой — полноценное API для разработчиков.

Что использовать: webhook или polling?

Обе технологии занимаются одним и тем же: приносят вам сообщения о событиях. Тем не менее, между ними огромная разница: polling легко реализуется обычной библиотекой requests, в то время как для webhook обязательно нужен сайт, который будет принимать и обрабатывать запросы от сервера уведомлений. Вот наш пример такого сайта для Facebook.

Взамен webhook снижает нагрузку на сеть: вы обмениваетесь сообщениями с сервером уведомлений только "по делу", в то время как polling постоянно меняется пустыми сообщениями:
Клиент: Обновления есть?
Сервер: Обновлений нет.
Клиент: А теперь?
Сервер: Всё ещё нет
...

При этом вы не теряете мгновенность ответа, как при long polling, потому что сервер по-прежнему пишет вам сразу, как только ему написал пользователь.