アーキテクチャ決定記録: JSON 対 gRPC を使用する API
状態
承認済み
コンテキスト
私たちは、複数のクライアントが使用する新しいサービスの API を設計しています。API を実装するための 2 つの選択肢、すなわち HTTP 上の JSON を使用するか、gRPC を使用するかを検討してきました。
HTTP 上の JSON は API を構築するために広く使用されているアプローチであり、多くのプログラミング言語やフレームワークでサポートされています。このアプローチはシンプルで軽量で、理解しやすいため、多くのプロジェクトにとって良い選択です。しかし、特に大量のデータを扱う場合には、他の選択肢より効率が低くなる可能性があります。
一方、gRPC は API を構築するためのより効率的な方法を提供する、より新しい技術です。データの転送にバイナリシリアライゼーションを使用するため、JSON を使用するよりも高速でコンパクトにできます。gRPC は双方向ストリーミングもサポートしているため、リアルタイムアプリケーションにとって良い選択です。
決定
両方の選択肢の長所と短所を検討した結果、私たちは API に gRPC を使用することを決定しました。HTTP 上の JSON の方がシンプルな選択肢ですが、gRPC の方がサービスにとってより効率的でスケーラブルなソリューションを提供すると考えています。また、API が大量のデータを扱うことを想定しており、このユースケースでは gRPC のバイナリシリアライゼーションの方が効率的です。
さらに、gRPC の双方向ストリーミングのサポートは、将来開発する可能性のあるリアルタイムアプリケーションにとって有益であると考えています。
結果
gRPC を選択することで、HTTP 上の JSON を使用する場合と比べて、API を構築するために異なるツールとライブラリのセットを使用する必要があります。これらの技術を学び、実装するために、追加の時間と労力が必要になる可能性があります。さらに、私たちの API を使用したいクライアントは、gRPC 互換のライブラリを使用する必要がありますが、それらは HTTP 上の JSON ライブラリほど広くサポートされていない可能性があります。
しかし、gRPC を使用する利点はこれらの潜在的な欠点を上回ると考えており、この決定がより効率的でスケーラブルな API につながると確信しています。