thrift 或 grpc 接口存储在哪里?

Where to store thrift or grpc interfaces?

thrift 接口可以跨多种语言编译。它只是文本文件,为什么没有像 swagger hub 这样的在线工具?我不想跨使用该界面的项目复制粘贴界面

我也觉得用 jar 文件打包接口没有用,因为只有 jvm 语言可以解析该接口,而且它不是用户友好的方式。这不仅与节俭有关,也与 grpc 有关。我没有找到任何与这个问题相关的文档,也找不到任何最佳实践

假设您有一个包含接口的 .proto 文件,每个子项目都需要了解该文件。有两种主要方法可以解决此问题:提供文件或复制文件。

供应商文件

在此选项中,您创建一个附加项目(如 git 存储库)来存储所有接口定义。每个需要了解接口的项目都将包含一个引用(git 子模块或 git 子树),其中包含接口项目。当您构建项目时,需要同步接口,然后用于生成必要的代码。

这种方法的缺点是 git 子树和子模块(或您使用的任何版本控制)更难使用,并且构建代码的人需要额外的工作。如果您对子项目中的界面进行了更改,则可能很难将这些更改应用回上游的界面项目。

复制文件

在此选项中,您可以在项目之间手动复制文件,并手动使它们保持同步。每次进行更改时,您都希望将该更改应用于依赖于该界面的所有其他项目。但是,在使用 Protobuf 时,请务必注意您 没有 执行此操作。 Protos 被设计为高度向后兼容。

例如,将原型定义从一种形式更改为另一种形式的代码实际上可以同时使用两种形式。旧代码将查看旧表单,新代码可以决定查看旧表单还是新表单。所有用户升级后,您可以删除旧表单。

这种方法的缺点是它会将复杂性推入代码的解码部分。您最终需要与未知数量的旧客户端向后兼容。由于并非每个项目都会与接口定义同步,因此接口的所有用户都需要更加灵活。这个问题不是 Proto 特有的,而是自然发生的;每个人都会遇到。

第二个缺点是必须手动复制更改。您必须确保永远不要重复使用字段编号或名称。如果您有很多项目依赖于该界面,那么您的工作就更多了。

选择哪个?

这两种方法在客观上都不比另一种更好。每一个都将复杂性推入构建的不同部分。据我所知,大多数人更喜欢复制文件,因为它比学习高级 git 命令更容易。