猿问

gRPC 和 Swagger 注解区别

我有一个协议缓冲区定义,它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"

}

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


千万里不及你
浏览 107回答 1
1回答

四季花海

我不太熟悉 protoc-gen-swagger 本身,但我相信这是因为这里定义的 json-proto 格式而发生的:这样做是为了让基于 JSON 的 API 更加“自然”。我不知道有什么办法可以避免这种情况,除非使用您自己的类型来保存时间戳而不是google.protobuf.Timestamp. 但是,JSON 转换应该在两个方向上都能正常工作,所以当库将 JSON 转换回原始消息时,应该不会造成任何问题。
随时随地看视频慕课网APP

相关分类

Go
我要回答