api - 更改包装是否会使用protobuf破坏现有客户?

如果我改变

syntax = "proto3";

package a.v0;

message HtmlStore{
    string html = 1;
}


syntax = "proto3";

package a;

message HtmlStore{
    string html = 1;
}

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

最佳答案

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

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

因此,假设您尚未使用Any:就发送的内容而言,更改package将是完全不可见的,并且不会影响任何人。

然而!如果他们收到.proto的更新版本并在其构建过程中运行代码生成,则其先前工作的代码可能会停止编译-要求他们从引用这些类型的代码中删除.v0

电线上发送的唯一内容是字段号(对于html来说是1),电线类型(对于html来说是长度前缀-因此:电线类型2)和实际值。您还可以安全地重命名HtmlStorehtml(在相同条件下重命名Any等)。