2017-12-05 9 views
1

私が変更した場合は、protobufを使用してパッケージを変更すると既存のクライアントが破損しますか?

syntax = "proto3"; 

package a; 

message HtmlStore{ 
    string html = 1; 
} 

syntax = "proto3"; 

package a.v0; 

message HtmlStore{ 
    string html = 1; 
} 

私がいるProtobufを返すPythonのAPIを持っています。 APIを使用している既存のクライアントがあります。特定の要素のプロトタイプの定義を変更したいのですが、それが既存のクライアントを壊すかどうかを知りたいのですが?

答えて

3

注:使用している場合JSONエンコーディング:すべてのベットはオフです。

あなたはバイナリエンコーディングを使用している場合、packageは、ワイヤ形式の通常一部ではありません - ない限り、あなたはgoogle.protobuf.Any機能の使用を作りました。

Anyを使用していないと仮定すると、packageを変更すると送信される内容が完全に見えなくなり、誰も影響を受けません。

ただし、 .protoの更新されたバージョンを受け取り、コードの一部をビルドの一部として実行すると、以前に動作していたコードのコンパイルが中断され、そのタイプを参照するコードから.v0を削除する必要があります。

フィールド番号(htmlの場合は1)、ワイヤタイプ(ワイヤタイプ2の場合はhtmlの場合は長さ接頭辞)、実際の値。 HtmlStorehtml(同じ条件で再Anyなど)の名前を変更することもできます。

関連する問題