【问题标题】:How to wrap a proto message in a go model如何在 go 模型中包装 proto 消息
【发布时间】:2020-03-15 22:28:51
【问题描述】:

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

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

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

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

1) 我这样做对吗?

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

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

【问题讨论】:

    标签: go protocol-buffers grpc


    【解决方案1】:

    如果您想使用 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”一段时间,从而为现有客户端提供迁移时间)。

    【讨论】:

      猜你喜欢
      • 2020-03-10
      • 2022-12-03
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多