Webhooks и WebSockets — это две технологии веб-разработки, которые люди часто путают. Многие современные веб-приложения используют как Webhooks, так и WebSockets. Несмотря на то, что веб-перехватчики и веб-сокеты совершенно разные, они предназначены для связи в веб-приложениях.
Так что же такое Webhooks и WebSockets? Что отличает их?
Что такое вебхуки и как они работают?
Вы можете думать о Webhook как о «запускаемом событием HTTP-запросе». Что это значит? Веб-перехватчик — это действие обратного вызова HTTP, обычно запускаемое событием на сервере. Это еще не все, обычно он отправляет данные через предварительно настроенный URL-адрес на другой сервер. Это порождает идею о том, что веб-хуки являются средством связи «сервер-сервер».
Чтобы лучше понять механизм работы Webhooks, рассмотрим веб-приложение, использующее API Stripe для приема платежей. Всякий раз, когда клиент совершает платеж, Stripe получает деньги, но ваше приложение об этом не знает. Здесь на помощь приходят вебхуки. Рассмотрим изображение ниже:
Stripe требует, чтобы вы предоставили URL-адрес конечной точки Webhook для отправки платежных данных клиента на ваш сервер при запуске нового платежного события. Затем ваш сервер получает данные, выполняет над ними операции и сохраняет постоянные данные в базе данных.
Что такое веб-сокеты и как они работают?
WebSocket — это протокол, который вы обычно используете с JavaScript.. Он устанавливает двусторонний, постоянный, двунаправленный канал связи. Это происходит в течение одного соединение между двумя портами TCP от клиента (браузера) к серверу. Самое популярное применение WebSockets — в чат-приложениях, таких как WhatsApp.
В то время как Webhooks основаны на HTTP (т. е. используют протокол HTTP), WebSocket — это отдельный протокол, основанный на TCP, как и HTTP. WebSockets могут быть очень полезны при работе с приложениями для потоковой передачи данных сервер-клиент с малой задержкой.
Вы можете добиться низкой задержки с помощью соединения WebSocket, поскольку оно остается открытым между транзакциями, в отличие от HTTP по умолчанию. Это позволяет беспрепятственно передавать данные между обеими сторонами.
До WebSockets разработчики использовали различные методы получения данных в реальном времени по HTTP. Хотя они существуют уже некоторое время, они страдают от ограничений.
Например, длительный опрос требует, чтобы клиент всегда отправлял новый запрос на сервер через заданный интервал времени. Это означает, что когда на сервере появляются новые данные, он возвращает их. Но если его нет, запрос фактически теряется.
В отличие от Webhooks, любой конец соединения WebSocket может отправлять данные другому. Это одна из причин, по которой WebSockets обеспечивают огромное преимущество в скорости, особенно при отправке данных с сервера на клиент. Приложения, использующие WebSockets, должны иметь низкую задержку при получении данных с сервера.
Вы также можете использовать WebSockets через TLS, как и HTTP. Это защищает данные, которые вы передаете, помогая смягчить атаки «человек посередине». При таком подходе даже постоянное соединение останется безопасным. Вам не придется беспокоиться о том, что злоумышленники украдут данные или испортят их.
Когда следует использовать вебхуки?
Webhooks и WebSockets нацелены на внедрение более эффективных средств связи в режиме реального времени через Интернет. Однако делают они это совершенно по-разному. Часто бывает непросто решить, какую из этих двух технологий использовать в своем приложении. Вы должны обратить пристальное внимание на их сильные и слабые стороны, чтобы увидеть, что лучше всего соответствует вашим требованиям.
Итак, когда вы должны выбрать веб-хуки, а не веб-сокеты?
- При использовании API, которым вы не владеете. Рассмотрим пример Stripe из предыдущей иллюстрации Webhook. Stripe является поставщиком платежных услуг, и ваше приложение может строиться только на основе их API. У вас нет контроля над Stripe, поэтому вы не можете создать сервер WebSocket на их конце. В таких случаях вам следует использовать Webhooks.
- Если ваше приложение представляет собой сервер, которому необходимо взаимодействовать с другим сервером, лучше всего использовать веб-перехватчики. Это идеальная система связи «сервер-сервер».
- Веб-перехватчики не являются двунаправленными или постоянными. Вы должны использовать веб-перехватчики только тогда, когда ваше приложение не ожидает данных ответа по тому же каналу.
- Также следует отметить, что веб-перехватчики — идеальный способ для серверных операций, которые выполняются как бессерверные функции. Примеры включают облачные функции AWS Lambda и Google.
Вы можете поэкспериментировать с Webhooks на вебхук.сайт. Этот сайт позволяет увидеть, как будут выглядеть данные, которые Webhook отправляет в ваше приложение. Очень полезно понять природу связи Webhook, прежде чем пытаться реализовать конечную точку в своем приложении.
Когда следует использовать веб-сокеты?
Приложения реального времени, системы уведомлений и системы обмена данными в реальном времени — вот некоторые распространенные приложения WebSockets. Имея в виду, что с WebSockets канал соединения должен быть всегда открыт, этот протокол следует использовать только тогда, когда затраты того стоят.
- Вы должны использовать WebSockets, когда ваше приложение постоянно обменивается данными между клиентом и сервером. Например, в приложении для обмена местоположением в реальном времени местоположение пользователя постоянно обновляется как на сервере, так и на клиенте по мере его перемещения. Веб-сокеты делают это возможным.
- В мультимедийных коммуникационных приложениях, таких как WhatsApp, WebSocket является идеальным протоколом связи. Это обеспечивает очень быстрый двунаправленный обмен данными, который является центральным для таких приложений.
- Вы также должны использовать WebSockets в приложениях, которые реализуют каналы в реальном времени, такие как Livescore. На этом веб-сайте публикуются обновления футбольных матчей в режиме реального времени. Но он делает это без необходимости делать новые запросы или обновлять браузер.
- Другие случаи, когда вам следует использовать WebSockets, включают приложения для потоковой передачи видео/аудио в реальном времени, системы уведомлений в реальном времени и многопользовательские игры в реальном времени. Они также полезны в приложениях для совместного редактирования, таких как Google Docs, Notion и т. д.
Вебхуки и вебсокеты разные
Понятно, что, хотя Webhooks и WebSockets решают похожие проблемы, они не одинаковы, и каждый из них имеет свои особенности использования. Веб-перехватчики — это однонаправленные обратные вызовы, инициируемые событиями, основанные на протоколе HTTP. Технология WebSocket представляет собой автономный протокол, который позволяет осуществлять двунаправленный обмен данными без запросов.
Важно всегда определять свои потребности при создании приложения, чтобы не тратить ресурсы впустую. В некоторых случаях вам следует предпочесть веб-перехватчики, потому что веб-сокеты иногда могут быть непомерно дорогими. Убедитесь, что вы используете их только в случае необходимости.