1. 概要

この記事では、WebAPIの2つのアーキテクチャスタイルであるRESTとgRPCを比較します。

2. RESTとは何ですか?

REST(Representational State Transfer)は、WebAPIを設計するためのガイドラインを提供するアーキテクチャスタイルです。

サーバー側のリソースを操作するために、GET、POST、PUT、DELETEなどの標準のHTTP1.1メソッドを使用します。 さらに、 REST APIは、クライアントがサーバーに接続するために使用する必要のある事前定義されたURLを提供します。

3. gRPCとは何ですか?

gRPC(Remote Procedure Call)は、 HTTP/2プロトコルを使用してGoogleが開発したオープンソースのデータ交換テクノロジーです。

データ交換にProtocolBuffersバイナリ形式(Protobuf)を使用します。 また、このアーキテクチャスタイルは、開発者がWebAPIを開発または使用するために従わなければならないルールを適用します。

4. RESTと gRPC

4.1. ガイドラインと ルール

RESTは、何も強制せずにWebAPIを設計するための一連のガイドラインです。 一方、 gRPCは、データ交換のためにクライアントとサーバーの両方が順守する必要がある.protoファイルを定義することによってルールを適用します。

4.2. 基礎となるHTTPプロトコル

RESTは、HTTP1.1プロトコルに基づいて構築された要求/応答通信モデルを提供します。 したがって、複数のリクエストがサーバーに到達すると、サーバーはそれらのそれぞれを一度に1つずつ処理するようにバインドされます。

ただし、gRPCは、HTTP /2に依存するWebAPIを設計するための通信のクライアント応答モデルに従います。 したがって、 gRPCはストリーミング通信を可能にし、複数のリクエストを同時に処理します。 それに加えて、gRPCはRESTと同様の単項通信もサポートしています。

4.3. データ交換フォーマット

RESTは通常、データ転送にJSONおよびXML形式を使用します。 ただし、gRPCは、HTTP/2プロトコルを介したデータ交換をProtobufに依存しています。

4.4. シリアル化と 強いタイピング

ほとんどの場合、RESTはJSONまたは XMLを使用します。これには、シリアル化と、クライアントとサーバーの両方のターゲットプログラミング言語への変換が必要です。これにより、応答時間が長くなり、解析中にエラーが発生する可能性があります。リクエスト/レスポンス。

ただし、gRPCは、Protobuf交換形式を使用して選択したプログラミング言語に自動的に変換される強い型のメッセージを提供します。

4.5. レイテンシー

HTTP 1.1を利用するRESTでは、リクエストごとにTCPハンドシェイクが必要です。 したがって、HTTP1.1を使用するRESTAPIは、レイテンシーの問題に悩まされる可能性があります。

一方、gRPCは多重化されたストリームを使用するHTTP/2プロトコルに依存しています。 したがって、複数のクライアントは、それぞれに新しいTCP接続を確立しなくても、複数の要求を同時に送信できます。 また、サーバーは、確立された接続を介してクライアントにプッシュ通知を送信できます。

4.6. ブラウザのサポート

HTTP1.1のRESTAPIは、ユニバーサルブラウザをサポートしています。

ただし、多くのブラウザ(通常は古いバージョン)ではHTTP / 2が成熟してサポートされていないため、gRPCではブラウザのサポートが制限されています。 そのため、HTTP1.1とHTTP/ 2の間で変換を実行するには、gRPC-webとプロキシレイヤーが必要になる場合があります。 したがって、現時点では、gRPCは主に内部サービスに使用されています。

4.7. コード生成機能

RESTは、組み込みのコード生成機能を提供しません。 ただし、SwaggerやPostmanなどのサードパーティツールを使用して、APIリクエストのコードを生成できます。

一方、 gRPCは、そのprotocコンパイラを使用して、いくつかのプログラミング言語と互換性のあるネイティブコード生成機能を備えています。

5. 結論

この記事では、APIの2つのアーキテクチャスタイル、RESTとgRPCを比較しました。

RESTは、マイクロサービスとサードパーティアプリケーションをコアシステムと統合するのに便利であると結論付けています。

ただし、gRPCは、軽量のメッセージ送信を必要とする IoTシステム、ブラウザをサポートしないモバイルアプリケーション、多重化されたストリームを必要とするアプリケーションなどのさまざまなシステムでそのアプリケーションを見つけることができます。