Я ищу способ для моего приложения REST с поддержкой OpenAPI отправлять асинхронные события. Подумайте о приложении чата, где сообщения от других пользователей выталкиваются с сервера, когда другие пользователи нажимают «Отправить».
Очевидно, что эта концепция покрывается Обратными вызовами в OpenAPI, где клиент подписывается на конечная точка с URL, который будет вызываться сервером. Этот подход обычно называют "веб-зацепками". Например, в примере из документов, callbackUrl
из https://myserver.com/send/callback/here
отправляется всякий раз, когда происходит такое асинхронное событие.
A Major недостаток этого подхода в том, что для этого требуется клиент , чтобы иметь адрес publi c. Если клиент отстает от NAT , как, например, почти каждый браузер в мире, невозможно создать URL-адрес на клиенте для обратного вызова сервера. Так что для любого клиента на основе браузера невозможно использовать OpenAPI Callbacks . Эта статья прекрасно описывает проблему. Или я что-то пропустил?
Так как же одной модели клиентов за NAT нужно подписываться на события с использованием OpenAPI? Технически это возможно с Websockets (современный, предпочтительный) или Comet / Long-polling (старая школа, лучше избегать), но не с webhooks (из-за NAT).
( Обходным путем может быть использование стороннего решения, такого как https://webhookrelay.com/, со всеми возникающими проблемами задержки, безопасности и стабильности. Я бы хотел этого избежать.)