SHIFT >_CODE
← Журнал

Вебхуки или опрос: как системам правильно общаться друг с другом

Когда одной системе нужно узнавать о событиях в другой, есть два базовых подхода. Объясняем разницу простыми словами и рассказываем, как сделать любой из них надёжным.

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

Опрос: регулярно спрашивать

При опросе ваша система каждые несколько минут спрашивает другую: «Есть что-то новое?». Это просто сделать, и это работает почти с любым сервисом, у которого есть API. Минусы - задержка (о событии вы узнаёте только при следующей проверке) и лишняя нагрузка: большинство запросов возвращают пустоту, но всё равно расходуют лимиты и ресурсы.

Вебхуки: получать сообщение

С вебхуком другая система сама отправляет сообщение на ваш адрес, как только что-то произошло. Информация приходит почти мгновенно, и пустых запросов нет. Цена - ответственность: ваш адрес должен быть доступен, проверять, что сообщение действительно пришло от партнёра, и правильно обрабатывать его, даже если одно и то же сообщение придёт дважды.

Как сделать вебхуки надёжными

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

Практичная комбинация

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

Коротко

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