プロトコル バッファ v3

この章では、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 設計の単純化、安定化、パフォーマンス向上のために削除されました。たとえば、メッセージをログに記録する前に、機密情報の削除など、一部のフィールドのフィルタリングが必要になることがよくあります。フィールドが必須である場合、フィルタリングすることができません。

詳細については、プロトコル バッファをご覧ください。