この章では、API 設計でプロトコル バッファを使用する方法について説明します。 デベロッパー エクスペリエンスを簡素化し、ランタイム効率を高めるために、gRPC API では、API 定義にプロトコル バッファ バージョン 3(proto3)を使用することが推奨されます。
プロトコル バッファは、データ構造スキーマとプログラミング インターフェースを定義するための、言語中立でプラットフォームに依存しないシンプルなインターフェース定義言語(IDL)です。プロトコル バッファは、バイナリとテキストの両方の送信形式をサポートし、さまざまなプラットフォーム上のさまざまなワイヤ プロトコルで動作します。
プロトコル バッファの最新バージョンである Proto3 には、proto2 からの次の変更が含まれます。
- フィールド プレゼンス(
hasField
)は、プリミティブ フィールドに対してはデフォルトで削除されます。設定されていないプリミティブ フィールドには、言語が定義されたデフォルト値が含まれます。- メッセージ フィールドのプレゼンスは引き続き使用できます。このフィールドは、コンパイラによって生成された
hasField
メソッドを使用したり、null や実装によって定義された標識値と比較したりして、テストすることができます。 - protobuf v3.14 以降では、プリミティブ フィールドで
optional
キーワードを使用して、デフォルト値と未設定値を区別できますが、一般的には推奨されません。
- メッセージ フィールドのプレゼンスは引き続き使用できます。このフィールドは、コンパイラによって生成された
- フィールドのユーザー定義デフォルト値は使用できなくなりました。
- 列挙型の定義は、列挙値 0 から開始する必要があります。
- 必須フィールドは使用できなくなりました。
- 拡張機能は使用できなくなりました。
google.protobuf.Any
を代わりに使用してください。- 下位互換性やランタイム互換性の理由から、
google/protobuf/descriptor.proto
には特別な例外が認められています。
- 下位互換性やランタイム互換性の理由から、
- グループ構文は削除されます。
これらの機能は、API 設計の単純化、安定化、パフォーマンス向上のために削除されました。たとえば、メッセージをログに記録する前に、機密情報の削除など、一部のフィールドのフィルタリングが必要になることがよくあります。フィールドが必須である場合、フィルタリングすることができません。
詳細については、プロトコル バッファをご覧ください。