APIはSaaS開発の世界を一変し、クライアントとサーバの通信を多方面で強化しました。実装に入る前に、主要なモデルの理解が不可欠です。
gRPCとWebSocketは主要なAPI実装モデルで、同じ目的を果たしますが、手法や用途が異なります。両者の違いを見ていきましょう。
高速でオープンソースなRPC(Remote Procedure Call)フレームワークであるgRPC、またはGoogle RPCは、あらゆる環境で容易かつ確実に動作します。名前からもGoogle開発と分かります。
RPCは遠隔サーバでの処理実行に必要ですが、gRPCはRPCの課題を解決しています。サーバでもデータセンタでも、API実装を可能にします。
gRPCがRPCより一歩先を行くのは、protobufの概念を採用している点です。そもそもProtobufはデータのシリアライズに使われ、プラットフォームや言語に依存しません。
gRPCの認証は、Googleのトークン方式とSSL/TLSの組み合わせによる高度な仕組みです。
オープンソースのフレームワークであるgRPCは、監査、フォーク、改良が容易です。基本モデルはリクエスト・レスポンス方式で、HTTP/2を利用しています。双方向ストリームに対応し、プロトコルバッファを用いてデータの通信と転送を行います。ただし、内部サービス向けです。
gRPCの基本を理解した上で、その強みと弱みを見ていきます。強みとしては、次の点が挙げられます:
強みは大きいものの、完全無欠ではなく、次のような弱点もあります:
gRPCは、マイクロサービス開発、多言語対応サービス、クライアントライブラリの生成、さらにはブラウザやモバイルとバックエンドを即時に連携させるシーンで有用です。暗号通貨アプリでも試す価値があります。
WebSocketは、TCPベースの通信プロトコルで、全二重・双方向のデータ転送をサポートします。2011年、標準的なAPI実装ツールとして採用されました。
WebSocketは、クライアントとサーバ間に常時接続を確立し、いつでもデータ交換が可能です。有状態プロトコルで、いずれかが通信を終了するまで接続は途切れません。
データはパケット単位でクライアントとサーバ間を往復するため、チャット、ゲーム、ビットコイン取引のアプリ開発に適しています。
WebSocketは、その比類なき強みで、他のAPIと比べて優位性を発揮します。
しかし、HTML5ブラウザでのみ利用可能で、エッジキャッシングに対応せず、動的な相互作用に向かず、拡張性にも課題があります。
また、複数ユーザーが同時に利用し、即時のメッセージ配信と常時接続が求められるアプリ、例えばチャットやデータダッシュボードに最適です。
ゲームアプリにおいても、低遅延と高速通信が必要なため、WebSocketは好まれます。
いよいよ本題、gRPCとWebSocketの比較についてです。
両者は多角的に検証されていますが、まずはどちらも全二重・双方向通信を実現している点に注目してください。
どちらもHTTPを基盤としていますが、使用するバージョンが異なります。WebSocketはHTTP/1.1を、gRPCはHTTP2を利用しており、そのためデータ処理も異なります。
gRPCはメッセージをバイナリ形式で処理します。一方、WebSocketはJSONやMQTTなど、複数のデータ形式に対応しており、形式の違いがメッセージの読みやすさに影響します。
gRPCのメッセージは機械には理解しやすいですが、バイナリ形式のため人間には読み解くのが難しく、内容を把握するには手間がかかります。
幸い、WebSocketがサポートするデータ形式は人間にも扱いやすいため、メッセージの理解が容易です。これにより、WebSocketはgRPCよりもテキスト寄りのプロトコルとされています。
同時に複数のリクエスト処理が求められる場合、gRPCが選ばれる傾向にあります。gRPCはマルチプレキシングでリクエストをシームレスにまとめますが、WebSocketにはその機能がありません。
どちらの場合もセキュリティは重要な課題です。gRPCはトークン方式およびSSL/TLS暗号化を採用しており、APIセキュリティは確実です。一方、WebSocketには内蔵のセキュリティ機能がないため、JWT検証などのアクセス制御が必要です。
gRPCとWebSocketの概要を簡潔に知りたい場合は、以下の比較表をご覧ください。
gRPC | WebSocket | |
---|---|---|
APIセキュリティ | 内蔵暗号化により堅牢 | gRPCに劣り、アクセス制御が必要 |
HTTPバージョン | HTTP/2 | HTTP/1.1 |
データ形式 | バイナリ | JSONやMQTTなど複数 |
マルチプレキシング対応 | 対応 | 非対応 |
適切なAPIモデルを選ぶことが、将来のアプリの可能性を決定します。gRPCとWebSocketはどちらも有力な手法ですが、gRPCは即時通信が求められる場合に有用で、ブラウザ向けAPIには適していません。一方、WebSocketは継続的なデータ転送を実現しますが、拡張性に難があります。
まずはアプリ開発の目標を明確にし、次の点を考慮してください:
これらを踏まえ、次のプロジェクトにどちらを採用するか決定してください。
最新情報を購読