go - 如何在 go 模型中包装 proto 消息

标签 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) 是的,我如何复制大原始消息以进行建模,反之亦然以进行响应?

最佳答案

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

关于go - 如何在 go 模型中包装 proto 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58950377/

相关文章:

go - 在 Go 中解析来自文本文件的 HTTP 请求和响应

google-api - 谷歌 gRPC 网关 : Overriding response fields?

protocol-buffers - grpc 与 protobuf 文件的典型组织

Python gRPC 服务器不监听指定端口

serialization - 如何在 Protocol Buffer 中弃用整个消息?

http - Golang网拨用户:pass@ip:port gives: no such host

Go SSH 服务器通过 SCP 接受文件传输

ubuntu - 在 Docker 容器 (Ubuntu) 中运行在 Windows 中创建的 Go 应用程序

protocol-buffers - 如何使用 Protocol Buffers 构建第三方串行通信协议(protocol)?

java - 在 spring-boot 中将 protobuf 作为 JSON 发送