実際のところ
型チェックつきのバイナリである
その1でやったように、異なる機器間を高速で通信するために作られた規格です。
バイナリなのでJSONのようなテキストベースと比べてデータ量が軽いです。
加えてエンコード・デコードともに高速なのでオーバーヘッドも最小。
バイナリにする過程で型チェックもあるので変な定義をしたデータは早めにエラー潰しができて素敵。
途中で要素を追加しても後方互換性がある
message Person {
string name = 1;
int32 age = 2;
}これに新たに"email"という要素を追加しても、要素毎に通し番号振っている構成なので後方互換性が確保されるという中々Goodな仕様。
message Person {
string name = 1;
int32 age = 2;
string email = 3; // 新しいフィールドを追加しても、古いコードは影響を受けない
}