我不确定这是否是发布这个问题的合适论坛,但我正在尝试在web应用程序的上下文中学习gRPC/protobufs。我在Flutter中构建UI,后端在Go中使用MongoDB。我能够运行一个简单的go服务,并且能够使用Kreya查询它,但是我现在的问题是-我如何将UI与后端集成?为了调用Kreya,我需要导入protobufs。我需要在前端和后端维护相同的协议吗?这意味着,我是否真的需要将后台的所有协议复制到我的UI代码库中,并在那里进行本地编译?这似乎是一场噩梦,因为现在必须在两个地方维护protobufs,而不是在一个地方。
维护协议的最好方法是什么?
发布于 2021-08-18 18:46:43
是的,但可以将protos看作是客户端和服务器之间的共享(契约)。
protos定义了客户端能够与服务器通信的接口。为了使其有效,客户端和服务器需要实现相同的接口。
要做到这一点,一种方法是将protos存储在一个存储库中,您可以在实现它的任何客户端和服务器中共享该存储库。这为protos提供了一个单一的真理来源。我还将protos编译(protoc
)生成为我将在此共享protos存储库中使用的语言(例如Golang、Dart等)的副本,并在需要时从存储库导入。
然后,在您的示例中,客户端导入Dart生成的源,Golang服务器从共享存储库导入Golang生成的源。
或者,您的客户端和服务器可以在需要时动态地protoc
编译适当的源代码,通常作为自动构建过程的一部分。
尽量不要跨客户端和服务器复制protos,因为这将使维护一致性变得具有挑战性;确保每个副本保持同步将是具有挑战性的。
https://stackoverflow.com/questions/68840930
复制相似问题