首页 > 解决方案 > 在哪里存储项目之间共享的 proto 文件?

问题描述

我有项目 A 和项目 B。它们可能使用不同的编程语言。项目 A 使用 proto 文件公开 API,项目 B 将使用该 API 以项目 B 使用的编程语言生成 API。

但是原始文件存储在哪里?使用 protobuf 的常规方法是什么?您是否将从 proto 文件文件生成的文件添加到版本控制?

如果您在项目 A 和项目 B 中都存储了 proto 文件的副本,那么如果项目 A 更改了其 API,那么项目 B 将不得不将它们复制过来。当有很多项目使用项目 A 公开的 API 时,这种方法效果不佳。

如果您有一个单独的项目,项目 C,包含共享的 proto 文件,则可以解决上述问题。但是那么你如何从项目 A 和项目 B 中生成 proto 文件呢?

标签: protocol-buffersdependency-managementproto

解决方案


我建议将.proto文件存储在单独的项目中。这些是您的两个项目之间的合同,它们不一定由任何一个“拥有”。将它们存储在单独的项目中为两个项目成员协商文件更改提供了中立的基础 - 例如通过拉/合并请求过程,其中可能有来自两个项目的成员充当审阅者。

至于从 proto 文件生成代码,我可能会在需要它们的项目中这样做。因此,在您的情况下,项目 C 将仅包含.proto文件,而项目 A 和 B 会将.proto文件拉入并生成他们需要的代码。我觉得它必须是这样,因为它是项目 A 和 B 正在使用 protobuf 生成的代码。如果代码是在项目 C 中生成的,那么项目 A 和 B 仍然必须提取生成的代码才能使用它,并且由于项目 C 在技术上与 A 和 B 分离,因此需要哪些语言并不明显生成 - 所有这些?只需要2个吗?

通过创建项目 C,您正在创建一个可能容纳更多.proto其他项目的文件。展望未来,您可能有许多共享通用基本消息类型的项目。要管理具有许多相互关联的项目的架构,尝试合并消息定义很有意义,如果每个项目都维护自己的定义,这将是困难的/不可能的,如果有重复的副​​本,更糟糕的是(如你所说)。将它们存储在一个位置允许新项目获取现有定义并扩展它们(在进化指南内),并允许更严格地管理和维护定义集,例如一组经验丰富的审阅者确保一切都在完成始终如一且明智地——无论是从建模、命名空间还是版本控制的角度来看。


推荐阅读