Проведем сравнение между обычным опросом (Polling) и webhook.
Как пример возьмем сайт электронной коммерции (Ozon). Клиенты отправляют заказы в сервис заказов через API-шлюз, который в последствии обращается к платежному сервису. Затем платежный сервис обращается к внешнему поставщику платежных услуг (PSP) для завершения транзакций.
Существует два способа связи с внешним PSP.
Короткий опрос
После отправки платежного запроса на PSP платежный сервис продолжает запрашивать у PSP статус платежа. После нескольких раундов PSP наконец возвращает конечный статус.
У короткого опроса есть два недостатка:
1. Постоянный опрос статуса требует ресурсов платежного сервиса.
2. Внешний сервис взаимодействует напрямую с платежным сервисом, создавая уязвимости в системе безопасности.
Webhook
Мы можем зарегистрировать webhook во внешнем сервисе. Это означает: сообщите мне по определенному URL-адресу, когда у вас появятся обновления по запросу. Когда PSP завершит обработку, он вызовет HTTP-запрос с указанным URL адресом для обновления статуса платежа.
Таким образом, меняется парадигма программирования, и платежному сервису больше не нужно тратить ресурсы на опрос статуса платежа.
Webhook часто называют обратными API или push-API, поскольку сервер отправляет HTTP-запросы клиенту. При использовании webhook нам нужно обратить внимание на 3 вещи:
- разработать правильный API для вызова внешней службы;
- настроить правильные правила в шлюзе API из соображений безопасности;
- зарегистрировать правильный URL-адрес на внешней службе.
P.S. Что делать, если PSP никогда не вызовет webhook?