API 管理
gRPCとREST: API設計におけるgRPC、OpenAPI、RESTの理解と使いどころ
- API設計モデル: API設計では主にRPCとRESTの2つのモデルが使われる。現代のAPIの大半はHTTPプロトコルを基盤として実装されている。
- gRPC: HTTP 2.0をトランスポートプロトコルとして使用するRPC API実装技術。Googleなどでは、RPCとHTTPの考え方を組み合わせたAPIが多く使われている。
- HTTPの3つの主要な利用方法:
- REST: クライアントはサーバーが提供するURLをそのまま使用し、URLの形式を理解する必要がない。
- gRPC: HTTP/2を使うが、HTTPはAPI設計者に露出しない。
- OpenAPI: クライアントはURLパステンプレートを使ってAPIを呼び出す。
REST
- 特徴: クライアントはURLの形式を理解する必要がなく、URLはAPI仕様の一部ではない。
- 長所: 安定性、一貫性、汎用性など、Webの利点を備える。エンティティ指向モデルのほうがよりシンプルで理解しやすい。
gRPC
- 特徴: HTTP/2を使うが、HTTPの詳細は隠蔽される。クライアントは手続きを呼び出し、パラメータを渡してAPIを利用する。
- 長所: クライアント側のプログラミングライブラリを簡単に生成でき、性能が高い。
OpenAPI
- 特徴: URLパステンプレートを使ってAPIを呼び出し、クライアントがURLの形式を理解する必要がある。
- 長所: 標準的なHTTP技術だけでAPIにアクセスできる。クライアント側のプログラミングライブラリを生成できる。
gRPCとOpenAPIの比較
- 共通点: どちらもRPCインターフェース定義言語(IDL)として利用できる。
- 相違点: gRPCはHTTPの詳細を隠し、OpenAPIはHTTPの詳細を露出する。
RESTの長所
- エンティティ指向モデル: よりシンプルで理解しやすく、時間が経っても安定している。
OpenAPIの使い方
- パス定義: パスとHTTPメソッドを使ってAPIを定義する。
OpenAPIの長所と短所
- 長所: RPCモデルに近く、プログラマにとって親しみやすい。HTTPリクエストにマッピングできる。
- 短所: HTTPの詳細を設計するのに多くの労力が必要となる。
gRPCの長所
- シンプルな実装: サーバー側の実装がシンプルで、クライアント側ライブラリも簡単に生成できる。
- 性能: バイナリペイロードを使用するため効率的である。
gRPCの短所
- 特別なソフトウェアが必要: クライアントとサーバーの両方に特別なソフトウェアが必要となる。
- プロキシ機能の制約: HTTP APIとは異なり、プロキシで機能を拡張または変更しにくい。
結論
- API設計の選択: REST、OpenAPI、gRPCそれぞれの長所と短所を考慮して選ぶ必要がある。
- gRPC利用時の考慮事項: クライアントがgRPC技術を採用しなくてもよい場合や、内部APIである場合に有利である。
1件のコメント
Hacker Newsのコメント
gRPCを学ばなければよかったと後悔している。デバッグと設定調整に多くの時間を費やした
長年APIを構築してきており、gRPCとHTTP/RESTを使ってきた
FAANGで働いた経験があり、内部サービスルーティングにgRPCが有用だと考えている
双方向ストリーミングをしない限り、gRPCは時間の無駄だと思う
gRPCを使ったプロジェクトで性能を理由に導入したが、JSON APIに切り替えた
connectrpcを使うことでgRPCの問題点を解決しつつある
gRPCはRESTより開発体験が悪いと考えている
Roy Fieldingは、REST APIでは最初のURIと標準化されたメディアタイプだけ分かっていればよいと述べている
データセンター内でgRPCを使うのは好きではない
gRPCはGoogleの外では扱いづらいと感じた