如何在go模型中包装原始消息

时间:2019-11-20 09:01:16

标签: go protocol-buffers grpc

我目前正在使用protobuf将基于rest api的go服务迁移到gRPC。这是一项功能强大的服务,具有许多API,并且已经投入生产,因此我不想进行太多更改以破坏现有系统。

所以我想使用go模型作为事实来源,并生成.proto消息,我认为我可以使用它-Generate proto file from golang struct

现在,我的API也希望根据已定义的go模型进行请求和响应,因此我将其更改为使用.proto模型进行请求和响应。但是当请求/响应传递时,我想将它们包装在go模型中,然后其余代码不需要任何更改。

在那种情况下,如果请求很小,我可以简单地复制go模型中的所有字段,但是在大请求或嵌套模型的情况下,这是个大问题。

1)我这样做正确吗?

2)不,正确的方法是什么?

3)是的,我如何复制大原型消息以进行建模,反之亦然以进行响应?

1 个答案:

答案 0 :(得分:0)

如果要使用go模型作为事实来源,为什么要对REST请求/响应使用.proto生成的模型呢?是因为您想使用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”保留一会儿,从而给现有客户端腾出时间来进行迁移)。