Webhook
В этой статье мы поговорим про Webhook
. Эта тема тесно связана с понятием Polling
. Если вы не знаете, что это такое — у нас уже есть отдельная статья о Polling.
Напомним, что Polling — это когда клиент всё время спрашивает у сервера “есть что-нибудь новенькое?”, а сервер присылает события (например, новые сообщения) или пишет, что ничего не происходило.
Webhook — это то же самое, только наоборот. Теперь если что-то случается (например, новое сообщение) — сервер сам пишет клиенту:
Давайте рассмотрим схему подробнее. Есть 2 основных действующих лица: клиент и сервер уведомлений. Как только вашему боту написал пользователь — сервер уведомлений шлёт вам JSON-объект, где указывает кто писал, что писал и так далее. Дальше клиент сам решает, как на это сообщение отреагировать. Он может прислать одно сообщение, может несколько, а может вообще промолчать. В конце он отвечает серверу “Ок, 200”, обозначая этим, что запрос обработан.
Чтобы клиент мог писать в ответ, обычно создаётся отдельное API, где реализованы запросы на отправку сообщений и так далее. API и сервер уведомлений — это обычно одна та же соцсеть, просто разные микрсервисы. Один занимается только рассылкой уведомлений, другой — полноценное API для разработчиков.
Что использовать: webhook или polling?
Обе технологии занимаются одним и тем же: приносят вам сообщения о событиях. Тем не менее, между ними огромная разница: polling легко реализуется обычной библиотекой requests
, в то время как для webhook обязательно нужен сайт, который будет принимать и обрабатывать запросы от сервера уведомлений. Вот наш пример такого сайта для Facebook.
Взамен webhook снижает нагрузку на сеть: вы обмениваетесь сообщениями с сервером уведомлений только “по делу”, в то время как polling постоянно меняется пустыми сообщениями:
Клиент: Обновления есть?
Сервер: Обновлений нет.
Клиент: А теперь?
Сервер: Всё ещё нет
…
При этом вы не теряете мгновенность ответа, как при long polling, потому что сервер по-прежнему пишет вам сразу, как только ему написал пользователь.