在web应用程序中,客户端和服务器都需要protobuf的副本吗



我不确定这是否是发布这个问题的合适论坛,但我正在尝试在web应用程序的上下文中学习gRPC/protobufs。我正在Flutter中构建UI,并在Go with MongoDB中构建后端。我能够运行一个简单的go服务,并且能够使用Kreya查询它,但我现在的问题是——我如何将UI与后端集成?为了给克雷亚打电话,我需要导入protobufs。我需要在前端和后端维护相同的protobuf吗?也就是说,我真的必须将后台的所有protobuf复制到我的UI代码库中,并在那里进行本地编译吗?这似乎是一场噩梦,因为现在原蟾蜍必须被维持在两个地方,而不是一个地方。

维护原蟾蜍的最佳方法是什么?

是的,但将protos视为客户端和服务器之间的共享(契约)。

protos定义了客户端能够与服务器通信的接口。为了使其有效,客户端和服务器需要实现相同的接口。

一种方法是将你的原型存储在一个repo中,你可以在任何实现它的客户端和服务器中共享这个repo。这提供了原型真实性的单一来源。我还生成了已编译的protos(protoc)的副本,这些副本是我将在这个共享protos repo中使用的语言,例如Golang、Dart等,并在需要时从repo导入。

然后,在您的情况下,客户端导入Dart生成的源,Golang服务器从共享回购中导入Golang生成的源。

或者,您的客户端和服务器可以在需要时动态地protoc编译适当的源,通常是作为自动构建过程的一部分。

尽量不要在客户端和服务器之间复制原型,因为这会使保持一致性变得困难;确保每个拷贝都保持同步将是一项挑战。

最新更新