はじめに
APIに関わり、アプリやウェブの開発に携わる方にとって、WebSocketやREST APIはなじみ深いものと思われます。しかし、両者を区別する明確な基準を持つ方は少ないでしょう。本記事では、これら2つの技術を日常的に利用する全ての方へ、違いを明らかにすることを目指しています。
RESTとWebSocketは、開発者が日常的に扱う重要な技術です。両者の違いや目的がはっきりしなければ、効果的な活用は難しいです。しかし、WebSocket APIとREST APIの詳細に入る前に、まずこれら2つの基本的な意味を理解しましょう。
技術的な観点では、RESTはウェブアプリやサービスの開発でよく言及される設計の原則の集まりにすぎません。RESTはHTTPプロトコルに基づくウェブアプリの開発に用いられます。
HTTPベースの通信は主に一方向であるため、REST APIの利用により、必要な時にデータを取り出すことができます。REST APIは、要求された情報を提供します。
RESTを利用する際には、いくつかの特徴が見られます。
例えば、RESTはステートレスであり、標準的です。すべてのRESTリクエストはHTTPの動詞(GET、PUT、POST、Delete)に従って作成されます。
リクエスト作成時に用いられる動詞に応じて、RESTリクエストはデータを処理します。たとえば、REST APIでDelete動詞が使われれば、命令に従いデータは削除されます。RESTのアーキテクチャは、クライアントとサーバが独立して展開できるようにしています。
WebSocketプロトコルは、RESTとは異なり状態を保持し、2つのアプリ間で途切れないデータ伝送や情報交換を可能にします。ポートとソケットを利用し、TCP接続上でのみ動作します。双方向通信をサポートしており、同じソケットやポートで送受信が行われるため、継続した接続が確立されます。
REST APIは、ステートレスな通信を支えるために存在します。この方式では、即時のデータ提供は必要ありません。ウェブアプリからデータが要求された時にのみ情報が送られます。RESTの機能は、自動販売機の仕組みに例えることができます。自動販売機はリクエストがないと商品を出さず、命令がある時にのみ動作します。
一般的に、アプリが継続的または途切れないデータ提供を必要とする際にWebSocketは使われます。たとえば、チャットアプリは常時メッセージを受信する必要があります。ユーザーがアプリを開いていなくてもメッセージは届くべきです。こうした連続した通信は、WebSocketでのみ実現可能です。途切れないデータ提供では、RESTではリソース消費が大きくなる一方、WebSocketはその手間を軽減します。
早速、REST APIとWebSocket APIの最も気になる点、すなわちその違いについて説明する。
WebSocketの特徴
RESTの特徴
比較表
要素 | REST | WebSocket |
---|---|---|
コスト | 比較して高い | ポートとソケットを使うためコスト効率が良い |
情報の保持 | RESTはステートレスなため、リクエストに関連するログは保存されない | セッションやポートの情報などが利用される |
通信モデル | リクエスト-レスポンスモデルを使用する | フルデュプレックス通信モデルを採用する |
TCP接続 | リクエストごとに新規接続が必要 | 常に同じ接続が使用される |
オーバーヘッド | すべてのリクエストで必要 | オーバーヘッドは不要 |
本記事は単に違いを述べるだけではありません。どちらが優れているかではなく、どちらが適切かを理解することが重要です。RESTが適している場合とWebSocketが有用なシーンを見極める必要があります。
必要な時にだけデータを取得するケースでは、RESTの利用を推奨します。RESTは多様なリソースを提供するため、要求された情報は確実に受け取ることができます。しかし、高速なデータ提供が求められる場合には不向きです。
一方、データの一部も逃さずに受信する必要があるアプリでは、WebSocketが適しています。たとえば、ティックデータの解析が必要なケースやリクエストが非常に多い場合、WebSocketが理想的です。
次に、WebSocketを使うべきでない場面について説明します。
垂直と水平の両方にスケールさせる必要がある場合、WebSocketは垂直スケールのみ対応しているため、不適切です。
RESTかWebSocketのいずれを選んでも、アプリは他のソフトウェアと適切に連携できることは確実です。通信の要件や期待に応じて、適切な方を選択してください。RESTは高度で安全性に優れる一方、WebSocketは低レベルのコンポーネントに依存します。
この2つの違いを理解し、賢明な選択ができることを願っています。どちらを選ぶにしても、厳格で堅牢なAPIセキュリティの導入は欠かせません。これにより、安全なデータ伝送と交換が実現し、脅威からデータが守られます。
Using WebSockets - Google
Getting Started with the REST API - Google
最新情報を購読