如何跨项目和团队共享和版本协议缓冲区(proto)?

时间:2018-04-30 07:01:16

标签: python protocol-buffers grpc

我正在开发一系列Python项目,涉及通过gRPC的各种服务将数据提供给其他开发团队(C ++ / Python)。在此计划开始时,服务器项目中包含proto文件的所有文件都包含在内。顺便说一下,我用https://semver.org/版本化了我的项目。

然后我开始实现客户端/ API库,因此我将Proto文件/生成的代码移动到客户端项目。我还使用Python包使服务器依赖于客户端库。

由于我的环境(No Docker)的性质,服务器被打包在RPM中,而客户端生成两个工件1)可以为C ++项目静态链接的RPM,2)可以上传的Pypi包和通过Pypi repo下载。服务器通过PIP下载Pypi依赖。

我遇到的问题是客户端/ API库上的SemVer给出了错误的含义,因为这会绑定proto接口的版本和实际的客户端版本。这是一个问题,因为如果客户端库中存在一个错误导致版本号出现问题,那么这将给出proto接口在不真实时已经进行了切换的印象。

此时,我开始认为我应该有一个仅包含proto文件和生成代码的第三个项目。但是,每次我需要实现一项新服务时,这都会导致我的git repo中的一个小项目(3x)爆炸,或者我应该将所有原型分组到一个项目中。

对于如何在保持语义背后隐藏原型文件的任何建议或建议表示感谢?

1 个答案:

答案 0 :(得分:0)

用于管理普通原型的Git子模块可以解决您的问题。

定义子模块时,您确定这部分代码对指向此模块的所有repo都是通用的。

此外,您的子模块实际上指向提交。因此,如果您的模块(原型模型)有更新,您必须手动将更新提取到您的商务代码中。

另一方面,如果您发送错误,如果您不更新子模块,则不会重新发送原型。