Webhook と WebSocket: どう違うの?

Webhook と WebSocket: どう違うの?

Webhook と WebSocket は、よく混同される 2 つの Web 開発テクノロジです。最新の Web アプリケーションの多くは、Webhook と WebSocket の両方を利用しています。 Webhook と WebSocket はまったく異なりますが、どちらも Web アプリケーション内の通信に対応しています。





Webhook と WebSocket とは何ですか?それらを違うものにするものは何ですか?





Webhook とは何ですか? どのように機能しますか?

Webhook は、「イベントによってトリガーされる HTTP リクエスト」と考えることができます。これは何を意味するのでしょうか? Webhook は、通常、サーバー内のイベントによってトリガーされる HTTP コールバック アクションです。それだけではありません。通常、事前設定された URL を介して別のサーバーにデータを送信します。これにより、Webhook が「サーバー間」の通信手段であるという考えが生まれました。





Webhook の動作メカニズムをよりよく理解するために、Stripe の API を使用して支払いを受け取る Web アプリケーションについて考えてみましょう。顧客が支払いを行うたびに、Stripe はお金を受け取りますが、アプリにはわかりません。ここで Webhook の出番です。以下の画像を考えてみてください。

  Webhook の仕組みの視覚化

Stripe では、新しい支払いイベントがトリガーされたときに顧客の支払いデータをサーバーに送信するために、Webhook エンドポイント URL を提供する必要があります。次に、サーバーはデータを受信し、そのデータに対して操作を実行し、永続データをデータベースに保存します。



WebSocket とは何ですか? どのように機能しますか?

WebSocket は、通常 JavaScript で使用するプロトコルです .双方向の永続的な双方向通信チャネルを確立します。それは単一でそうします 2 つの TCP ポート間で確立された接続 クライアント(ブラウザ)からサーバーへ。 WebSocket の最も一般的なアプリケーションは、WhatsApp などのチャット アプリケーションです。

Webhook は HTTP ベース (つまり、HTTP プロトコルを使用する) ですが、WebSocket は HTTP と同様に TCP に基づく独自の完全なプロトコルです。 WebSocket は、低レイテンシのサーバー/クライアント データ ストリーミング アプリケーションで作業する場合に非常に役立ちます。





インターネットアクセスウィンドウ10はありませんが、接続されています

デフォルトの HTTP とは異なり、WebSocket 接続はトランザクション間で開いたままになるため、低レイテンシーを実現できます。これにより、両当事者間でデータがシームレスに流れるようになります。

  ウェブソケットの視覚化

WebSocket が登場する前は、開発者は HTTP 経由でリアルタイム データを取得するさまざまな方法を使用していました。彼らはしばらく前から存在していますが、制限に苦しんでいます。





たとえば、ロング ポーリングでは、クライアントは指定された時間間隔で常に新しい要求をサーバーに送信する必要があります。これは、サーバーに新しいデータがある場合、それを返すことを意味します。しかし、そうでない場合、リクエストは事実上無駄になります。

Webhook とは異なり、WebSocket 接続のどちらの端からもデータを送信できます。これは、特にデータがサーバーからクライアントに送信される場合に、WebSocket が大きな速度の利点を提供する理由の 1 つです。 WebSocket を使用するアプリは、サーバーからデータをフェッチする際の低レイテンシーの恩恵を受けるはずです。

HTTP と同様に、TLS 経由の WebSocket も使用できます。これにより、送信するデータが保護され、軽減に役立ちます 中間者攻撃 .このアプローチでは、永続的な接続でも安全性が維持されます。攻撃者がデータを盗んだり、通信によってデータが破損したりする心配はありません。

いつ Webhook を使用する必要がありますか?

Webhook と WebSocket は、Web を介したリアルタイム通信のより優れた手段を実装することを目的としています。ただし、それらはまったく異なる方法でそうします。多くの場合、アプリケーションでこれら 2 つのテクノロジのどちらを使用する必要があるかを判断するのは難しい場合があります。それらの長所と短所に注意を払い、どちらが要件に最も適しているかを確認する必要があります。

では、いつ WebSocket ではなく Webhook を選択する必要があるのでしょうか?

  • 所有していない API を使用する場合。前の Webhook の図の Stripe の例を考えてみましょう。 Stripe は支払いサービス プロバイダーであり、アプリケーションはその API の上にのみ構築できます。 Stripe を制御できないため、Stripe の最後に WebSocket サーバーを作成することはできません。このような場合は、Webhook を使用する必要があります。
  • アプリが別のサーバーと通信する必要があるサーバーである場合は、Webhook を使用することをお勧めします。これは、理想的な「サーバー間」通信システムです。
  • Webhook は双方向または永続的ではありません。アプリケーションが同じチャネルを介した応答データを予期していない場合にのみ、Webhook を使用する必要があります。
  • Webhook が、サーバーレス機能として実行されるサーバー操作に最適な方法であることも注目に値します。例には、AWS Lambda および Google クラウド関数が含まれます。

でWebhookを試すことができます webhook.site .このサイトでは、Webhook がアプリケーションに送信するデータがどのようになるかを確認できます。アプリケーションにエンドポイントを実装する前に、Webhook の通信の性質を理解しておくと非常に役立ちます。

いつ WebSocket を使用する必要がありますか?

リアルタイム アプリケーション、通知システム、およびライブ データ共有システムは、WebSocket の一般的なアプリケーションです。 WebSocket では、接続チャネルを常に開いておく必要があることに注意してください。このプロトコルは、コストに見合う場合にのみ使用する必要があります。

  • アプリケーションがクライアントとサーバー間で継続的にデータを交換する場合は、WebSocket を使用する必要があります。たとえば、ライブの位置情報共有アプリケーションでは、ユーザーの移動に応じてサーバーとクライアントの両方でユーザーの位置が継続的に更新されます。 WebSocket はこれを可能にします。
  • WhatsApp などのマルチメディア通信アプリケーションでは、WebSocket が理想的な通信プロトコルです。この種のアプリの中心となる非常に高速な双方向データ交換が可能になります。
  • Livescore などのリアルタイム フィードを実装するアプリケーションでも、WebSocket を使用する必要があります。この Web サイトでは、サッカーの試合の最新情報をリアルタイムで共有しています。ただし、新しいリクエストを作成したり、ブラウザを更新したりする必要はありません。
  • WebSocket を使用する必要があるその他のケースには、ライブ ビデオ/オーディオ ストリーミング アプリ、ライブ通知システム、リアルタイム マルチプレイヤー ゲームなどがあります。また、Google Docs、Notion などの共同編集アプリケーションでも役立ちます。

Webhook と WebSocket は異なります

Webhook と WebSocket は同様の問題を解決しますが、同じではなく、それぞれに固有のユース ケースがあることは明らかです。 Webhook は、HTTP プロトコルに基づく一方向のイベント トリガー コールバックです。 WebSocket テクノロジはスタンドアロン プロトコルであり、リクエストなしで双方向のデータ交換を可能にします。

リソースの浪費を避けるために、アプリケーションを構築するときは常にニーズを特定することが重要です。場合によっては、WebSocket は法外なコストがかかることがあるため、Webhook を優先する必要があります。必要な場合にのみ使用するようにしてください。