Как отправлять события OpenAPI / использовать обратные вызовы из-за NAT? Альтернатива webhooks? - PullRequest
0 голосов
/ 04 мая 2020

Я ищу способ для моего приложения 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/, со всеми возникающими проблемами задержки, безопасности и стабильности. Я бы хотел этого избежать.)

...