包中的更改是否会破坏使用protobuf的现有客户端?

时间:2017-12-05 13:09:42

标签: api protocol-buffers

如果我改变了,

syntax = "proto3";

package a.v0;

message HtmlStore{
    string html = 1;
}

syntax = "proto3";

package a;

message HtmlStore{
    string html = 1;
}

我有一个返回protobuf的python API。现有客户正在使用API​​。我想改变某些元素的protobuf定义,我想知道它是否会破坏现有的客户端?

1 个答案:

答案 0 :(得分:5)

注意:如果您使用 JSON 编码:所有投注均已关闭。

如果您使用二进制编码,package通常不是 部分的有线格式 - ,除非您已经使用了google.protobuf.Any功能。

假设您没有使用Any:根据发送的内容更改package将完全不可见,并且不会有任何人受到影响。

然而!如果他们收到.proto的更新版本并运行代码生成作为其构建的一部分,那么他们以前工作的代码可能会停止编译 - 要求他们从引用这些类型的代码中删除.v0。 / p>

在线上发送的唯一内容是字段编号(在html的情况下为1),线型(在html的情况下以长度为前缀 - 所以:线型2)和实际值。您还可以安全地重命名HtmlStorehtml(在相同条件下重新Any等)。