我目前正在使用protobuf将基于rest api的go服务迁移到gRPC。这是一个巨大的服务,有很多API,而且已经在生产中,所以我不想做太多的改变来破坏现有的系统。
所以我想使用我的go模型作为事实的来源,并生成我认为我可以用这个- Generate proto file from golang struct管理的.proto消息
现在,我的API也根据定义的go模型期望请求和响应,我将更改它们以使用.proto模型进行请求和响应。但是当请求/响应被传递时,我想把它们包装在我的go模型中,然后剩下的代码就不需要任何修改了。
在这种情况下,如果请求很小,我可以简单地复制go模型中的所有字段,但对于大请求或嵌套模型,这是一个大问题。
1)我这样做是正确的吗?
2)不,正确的方法是什么?
3)是的,我如何复制大的proto消息到go模型,反之亦然?
发布于 2019-11-20 20:47:45
如果你想使用go模型作为事实的来源,为什么你想要使用.proto生成的模型作为REST请求/响应呢?是因为您想使用proteus service generation (并在REST和gRPC之间共享代码)吗?
通常,如果您想要从REST迁移到gRPC,最常见的方法可能是使用grpc-gateway (请注意,从1.10.x开始,您可以使用in-process without resorting to the reverse proxy),但这将是"gRPC-first",您从中派生REST,而您似乎想要" REST - first",因为您已经在生产中使用了REST API。事实上,出于这个原因,grpc-gateway可能并不完全合适,因为它可能会生成与现有端点略有不同的端点。这取决于您能在多大程度上打破向后兼容性(也许您可以生成一组"v2“API,并将旧的"v1”保留一段时间,让现有客户端有时间迁移)。
https://stackoverflow.com/questions/58950377
复制相似问题