• вебхук
  • опрос
  • api

Вебхуки против опроса

Эта статья сравнит вебхуки и опрос, проанализирует преимущества и недостатки каждого подхода и обсудит, когда лучше использовать тот или иной.

Darcy Ye
Darcy Ye
Developer

Когда мы создаем веб-приложения, мы часто используем несколько сервисов. В подавляющем большинстве случаев это множество различных веб-сервисов, работающих вместе. В таком веб-приложении, состоящем из нескольких сервисов, передача данных - это то, что необходимо учитывать каждому разработчику.

Когда дело доходит до решения этой проблемы, два подхода стали основными: вебхуки и опрос. Каждый метод предоставляет уникальный способ получения и передачи данных от одного сервиса к другому. Выбор одного из них может существенно повлиять на эффективность вашего приложения, его возможности в реальном времени и общий пользовательский опыт. Эта статья сравнит вебхуки и опрос, проанализирует преимущества и недостатки каждого подхода и обсудит, когда лучше использовать тот или иной.

Что такое опрос?

Опрос (часто называемый API опросом) — это процесс, при котором клиент запрашивает конкретные данные через регулярные интервалы (скажем, каждые x секунд), а сервер отвечает предоставлением запрашиваемых данных.

Представьте это как задавание вопроса: «Есть ли новые данные?» через регулярные промежутки времени. Опрос может быть реализован через HTTP-запросы, где клиент отправляет GET-запрос серверу, и сервер отвечает предоставлением запрашиваемых данных.

Представьте, что Джон создал продукт для AI-документации под названием Doc.AI и использует Logto для управления идентификацией пользователей.

Фрэнк — пользователь, который зарегистрировался в продукте Джона и создал свою собственную личную учетную запись. Однажды Фрэнк присоединяется к рабочей области, созданной его другом Дэвидом. В этот момент Джон хочет отправить Фрэнку письмо с просьбой включить многофакторную аутентификацию (MFA), чтобы повысить безопасность его учетной записи, прежде чем Джон предоставит ему доступ к дополнительным конфиденциальным ресурсам.

Бэкэнд продукта Джона должен постоянно опрашивать соответствующие API, чтобы узнать, когда Фрэнк присоединится к рабочей области Дэвида.

Что такое вебхук?

Вебхук (т.е. "HTTP обратный вызов") — это механизм для обмена данными в реальном времени, при котором сервер отправляет данные клиенту, когда происходит событие. Вместо того чтобы клиент запрашивал данные, вебхук отправляет их клиенту каждый раз, когда происходит обновление.

Представьте это как почтовый ящик для вашего приложения. Когда происходят определенные события — например, регистрация нового пользователя или совершение платежа — вебхук оставляет сообщение в почтовом ящике, чтобы приложение знало, что происходит.

Давайте продолжим с нашим примером по Doc.AI, который мы использовали ранее для объяснения опроса. Вот как будет выглядеть диаграмма последовательности, если мы используем вебхуки, чтобы узнать, присоединился ли Фрэнк к рабочей области Дэвида:

Важные различия

  • Источник запроса Опрос инициализируется клиентом (в нашем примере, клиент - это Doc.AI, сервер - Logto), а вебхук срабатывает событием и инициируется сервером.
  • Расходы ресурсов Опрос растрачивает ресурсы компьютера, так как отправляет запросы через регулярные интервалы, что приводит к низкой эффективности использования ресурсов. Вебхук, напротив, инициируется сервером "по требованию". По сравнению с опросом, и клиент, и сервер потребляют значительно меньше ресурсов.
  • Тайминг Опрос инициируется клиентом, так что клиент может контролировать время получения данных. Однако вебхук инициируется сервером, и клиент может только принимать и обрабатывать данные. Тем не менее, благодаря различным механизмам, вебхук обеспечивает синхронизацию данных в реальном времени, что недоступно при использовании опроса.

Что выбрать?

Основываясь на механизмах опроса и вебхуков, общепринято выбирать опрос только в тех случаях, когда данные часто обновляются и требования к данным в реальном времени не являются строгими. В остальных случаях вебхуки будут лучшим выбором.

Однако при выборе вебхуков разработчикам следует учитывать следующие моменты:

  1. Если система сильно зависит от полученных данных, важно предусмотреть резервный план для получения данных в случае сбоя вебхука и невозможности синхронизации данных, включая, но не ограничиваясь, опросом или требованием к вебхуку иметь механизм повторной отправки и т.д.
  2. В клиентском конечном пункте, принимающем вебхуки, следует применять проверку API-секрета и подписи содержимого, чтобы предотвратить атаки хакеров, подделывающих запросы вебхуков.
  3. Поскольку вебхук может отправлять дублированные запросы, требуется соответствующая обработка, чтобы предотвратить дублирование данных и несоответствия.

Logto, как чрезвычайно популярное решение для идентификации пользователей, предлагает обширные сценарии вебхуков и отличную безопасность. Используя Logto в качестве системы идентификации продукта, ее можно легко интегрировать и адаптировать в различных приложениях.