go - gRPC 和 Swagger 注解区别

标签 go swagger protocol-buffers grpc-gateway

我有一个 Protocol Buffer 定义,其中包括 google.protobuf.Timestamp 作为消息的一部分。 Timestamp 消息非常简单,具有以下定义:

message Timestamp {
  int64 seconds = 1;
  int32 nanos = 2;
}

因此,gRPC 负载如预期的那样作为一个简单的值元组出现。但是,我还想为同一消息的 REST API 生成一些 swagger 注释,但它似乎将时间戳转换为 RFC 3339 样式字符串:

"timestamp": {
  "type": "string",
  "format": "date-time",
  "title": "timestamp"
}

我最近开始使用 Protocol Buffer 和 gRPC,所以我不确定我是否遗漏了什么,但这似乎与 grpc-gateway 实现不一致。为什么 REST 的格式与 gRPC 负载不同?还是我错过了一些方法来告诉 protoc-gen-swagger 不要将消息转换为字符串?

最佳答案

我不太熟悉 protoc-gen-swagger 本身,但我相信这是因为这里定义的 json-proto 格式而发生的:

https://developers.google.com/protocol-buffers/docs/proto3#json

这样做是为了让基于 JSON 的 API 更加“自然”。 除了使用您自己的类型来保存时间戳而不是 google.protobuf.Timestamp 之外,我不知道有什么方法可以避免这种情况。但是,JSON 转换应该在两个方向上都能正常工作,因此当库将 JSON 转换回原始消息时,应该不会造成任何问题。

关于go - gRPC 和 Swagger 注解区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53276555/

相关文章:

java - 使用 Protobuf 类与在 Java 中使用映射框架/层

Go protobuf无法识别相同的包

postgresql - 套接字 : operation not permitted when connecting to cloudsql

inheritance - Golang 方法覆盖

swagger - 如何在OpenAPI(Swagger)中记录动态查询参数名称?

java - 重写 EntityResponse toString 方法

import - Protobuffs 从另一个目录导入

Go Error : panic: runtime error: invalid memory address or nil pointer dereference. Changing map inside a struct which is present in 另一个结构,

sql - 使用 Postgres 时为 "Operator does not exist: integer =?"

swagger - OpenAPI 3 : Use array of objects for requestBody example