SHIFT >_CODE
← Журнал

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

Коли одній системі потрібно дізнаватися про події в іншій, є два базові підходи. Пояснюємо різницю простими словами й розповідаємо, як зробити будь-який із них надійним.

Інтернет-магазину потрібно знати, коли оплата пройшла. CRM потрібно знати, коли із сайту надійшла нова заявка. Дізнаватися про події в іншій системі можна двома базовими способами: регулярно питати або отримувати повідомлення.

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

Під час опитування ваша система кожні кілька хвилин питає іншу: «Є щось нове?». Це просто зробити, і це працює майже з будь-яким сервісом, що має API. Мінуси - затримка (про подію ви дізнаєтеся лише під час наступної перевірки) і зайве навантаження: більшість запитів повертають порожнечу, але все одно витрачають ліміти й ресурси.

Вебхуки: отримувати повідомлення

З вебхуком інша система сама надсилає повідомлення на вашу адресу, щойно щось сталося. Інформація надходить майже миттєво, і порожніх запитів немає. Ціна - відповідальність: ваша адреса має бути доступною, перевіряти, що повідомлення справді надійшло від партнера, і правильно його обробляти, навіть якщо те саме повідомлення прийде двічі.

Як зробити вебхуки надійними

Перевіряйте підпис або секрет, які провайдер додає до кожного повідомлення, - так ніхто не зможе надіслати вам підроблені події. Відповідайте швидко, а важку обробку виконуйте у фоні, інакше провайдер вирішить, що доставка не вдалася, і повторить її. Зберігайте ідентифікатор кожної обробленої події й ігноруйте дублі. Ведіть журнал вхідних повідомлень, щоб можна було розібратися в проблемах.

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

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

Коротко

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