哪里存储thrift或grpc接口?

时间:2017-09-03 11:25:01

标签: java rpc thrift grpc

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

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

1 个答案:

答案 0 :(得分:1)

假设您的接口有.proto文件,每个子项目都需要知道该文件。此问题有两种主要方法:供应文件或复制文件。

供应商文件

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

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

复制文件

在此选项中,您手动在项目之间复制文件,并手动使它们保持同步。每次进行更改时,您都希望将该更改应用于依赖于接口的每个其他项目。但是,在使用Protobuf时,请注意您没有来执行此操作。 Protos旨在高度向后兼容。

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

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

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

选择哪个?

这两种方法都不比其他方法客观好。每个人都将复杂性推向构建的不同部分。从我所看到的,大多数人更喜欢复制文件,因为它比学习高级git命令更容易。