Webhooks i WebSockets to dwie technologie tworzenia stron internetowych, które ludzie często mylą. Wiele nowoczesnych aplikacji internetowych wykorzystuje zarówno elementy Webhook, jak i WebSockets. Chociaż elementy Webhook i WebSockets są zupełnie inne, oba adresy komunikacji w aplikacjach internetowych.
Czym więc są Webhooki i WebSockets? Jakie są rzeczy, które je wyróżniają?
Czym są webhooki i jak działają?
Możesz myśleć o Webhook jako o „żądaniu HTTP wyzwalanym przez zdarzenie”. Co to znaczy? Webhook to akcja wywołania zwrotnego HTTP zwykle wyzwalana przez zdarzenie na serwerze. To nie wszystko, zwykle wysyła dane za pośrednictwem wstępnie skonfigurowanego adresu URL na inny serwer. To rodzi ideę Webhooks jako środka komunikacji „serwer-serwer”.
Aby lepiej zrozumieć mechanizm działania Webhooks, rozważ aplikację internetową, która używa API Stripe do otrzymywania płatności. Za każdym razem, gdy klient dokonuje płatności, Stripe otrzymuje pieniądze, ale Twoja aplikacja nie ma pojęcia. Tu właśnie pojawiają się webhooki. Rozważ obraz poniżej:
Stripe wymaga podania adresu URL punktu końcowego Webhook w celu wysłania danych płatności klienta na Twój serwer po wyzwoleniu nowego zdarzenia płatności. Twój serwer następnie odbiera dane, wykonuje na nich operacje i zapisuje trwałe dane w bazie danych.
Czym są WebSockets i jak działają?
WebSocket to protokół, którego zwykle używasz z JavaScript. Ustanawia dwukierunkowy, trwały, dwukierunkowy kanał komunikacji. Robi to w ciągu jednego połączenie nawiązane między dwoma portami TCP z klienta (przeglądarki) na serwer. Najpopularniejszą aplikacją WebSockets są aplikacje do czatu, takie jak WhatsApp.
Podczas gdy webhooki są oparte na protokole HTTP (tj. wykorzystują protokół HTTP), WebSocket jest kompletnym protokołem opartym na TCP, podobnie jak HTTP. WebSockets mogą być bardzo przydatne podczas pracy w aplikacjach do strumieniowego przesyłania danych serwer-klient o małych opóźnieniach.
Dzięki połączeniu WebSocket można osiągnąć niskie opóźnienia, ponieważ pozostaje ono otwarte między transakcjami, w przeciwieństwie do domyślnego protokołu HTTP. Umożliwia to płynny przepływ danych między obiema stronami.
Przed WebSockets programiści stosowali różne metody uzyskiwania danych w czasie rzeczywistym przez HTTP. Chociaż są już od jakiegoś czasu, cierpią z powodu ograniczeń.
Na przykład długie odpytywanie wymaga, aby klient zawsze wysyłał nowe żądanie do serwera w określonym przedziale czasu. Oznacza to, że gdy na serwerze pojawią się nowe dane, zwraca je. Ale jeśli nie, prośba jest skutecznie marnowana.
W przeciwieństwie do elementów Webhook jeden koniec połączenia WebSocket może wysyłać dane do drugiego. To jeden z powodów, dla których WebSockets oferują ogromną przewagę szybkości, zwłaszcza gdy dane są przesyłane z serwera do klienta. Aplikacje korzystające z WebSockets powinny korzystać z małych opóźnień podczas pobierania danych z serwera.
Możesz używać WebSockets również przez TLS, podobnie jak HTTP. Zabezpiecza to przesyłane dane, pomagając łagodzić ataki typu man-in-the-middle. Dzięki takiemu podejściu nawet trwałe połączenie pozostanie bezpieczne. Nie musisz się martwić, że atakujący ukradną dane lub uszkodzą komunikację.
Kiedy należy używać webhooków?
Webhooks i WebSockets mają na celu wdrożenie lepszych środków komunikacji w czasie rzeczywistym przez Internet. Robią to jednak na zupełnie inne sposoby. Często wyzwaniem może być podjęcie decyzji, której z tych dwóch technologii powinieneś użyć w swojej aplikacji. Powinieneś zwrócić szczególną uwagę na ich mocne i słabe strony, aby zobaczyć, który najlepiej spełnia Twoje wymagania.
Kiedy więc wybrać Webhooks zamiast WebSockets?
- Podczas korzystania z interfejsu API, którego nie jesteś właścicielem. Rozważmy przykład Stripe z wcześniejszej ilustracji Webhook. Stripe jest dostawcą usług płatniczych, a Twoja aplikacja może opierać się tylko na ich API. Nie masz kontroli nad Stripe, więc nie możesz stworzyć serwera WebSocket na ich końcu. W takich przypadkach powinieneś używać webhooków.
- Jeśli Twoja aplikacja jest serwerem, który musi komunikować się z innym serwerem, najlepiej użyć webhooków. Jest to idealny system komunikacji „serwer-serwer”.
- Webhooki nie są dwukierunkowe ani trwałe. Należy używać elementów Webhook tylko wtedy, gdy aplikacja nie oczekuje danych odpowiedzi w tym samym kanale.
- Warto również zauważyć, że webhooki są idealnym sposobem na operacje serwerowe, które działają jako funkcje bezserwerowe. Przykładami są funkcje chmury AWS Lambda i Google.
Możesz eksperymentować z webhookami na webhook.site. Ta witryna pozwala zobaczyć, jak będą wyglądać dane wysyłane przez webhooka do Twojej aplikacji. Bardzo przydatne jest zrozumienie natury komunikacji webhooka, zanim spróbujesz zaimplementować punkt końcowy w swojej aplikacji.
Kiedy należy używać WebSocketów?
Aplikacje czasu rzeczywistego, systemy powiadomień i systemy udostępniania danych na żywo to niektóre z popularnych aplikacji WebSockets. Mając na uwadze, że w przypadku WebSockets kanał połączenia musi być zawsze otwarty, ten protokół powinien być używany tylko wtedy, gdy koszt jest tego wart.
- Należy używać WebSockets, gdy aplikacja stale wymienia dane między klientem a serwerem. Na przykład w aplikacji do udostępniania lokalizacji na żywo lokalizacja użytkownika jest stale aktualizowana zarówno na serwerze, jak i na kliencie, gdy się przemieszczają. WebSockets to umożliwiają.
- W multimedialnych aplikacjach komunikacyjnych, takich jak WhatsApp, WebSocket jest idealnym protokołem komunikacyjnym. Pozwala na bardzo szybką dwukierunkową wymianę danych, co jest kluczowe dla tego rodzaju aplikacji.
- Powinieneś również używać WebSockets w aplikacjach, które implementują kanały czasu rzeczywistego, takich jak Livescore. Ta strona internetowa udostępnia aktualne informacje o meczach piłki nożnej na żywo w czasie rzeczywistym. Ale robi to bez konieczności wysyłania nowych żądań lub konieczności odświeżenia przeglądarki.
- Inne przypadki, w których powinieneś używać WebSockets, obejmują aplikacje do przesyłania strumieniowego wideo/audio na żywo, systemy powiadomień na żywo i gry wieloosobowe w czasie rzeczywistym. Są również przydatne w aplikacjach do edycji grupowej, takich jak Dokumenty Google, Notion itp.
Webhooki i WebSockety są różne
Oczywiste jest, że chociaż elementy Webhook i WebSockets rozwiązują podobne problemy, nie są one takie same i każdy z nich ma swoje własne szczególne przypadki użycia. Webhook to jednokierunkowe wywołania zwrotne wyzwalane zdarzeniami oparte na protokole HTTP. Technologia WebSocket jest samodzielnym protokołem, który umożliwia dwukierunkową wymianę danych bez żądań.
Ważne jest, aby zawsze identyfikować swoje potrzeby podczas tworzenia aplikacji, aby uniknąć marnowania zasobów. W niektórych przypadkach powinieneś preferować Webhooks, ponieważ WebSockets może czasami być nieopłacalny. Upewnij się, że używasz ich tylko wtedy, gdy jest to konieczne.