我有一个协议缓冲区定义,其中包括google.protobuf.Timestamp
作为消息的一部分。时间戳消息非常简单,具有以下定义:
message Timestamp {
int64 seconds = 1;
int32 nanos = 2;
}
因此,gRPC有效负载以预期的简单元组形式出现。但是我也想为同一条消息为REST API生成一些醒目的注解,但似乎将Timestamp转换为RFC 3339样式字符串:
"timestamp": {
"type": "string",
"format": "date-time",
"title": "timestamp"
}
我最近开始使用协议缓冲区和gRPC,因此我不确定在这里是否缺少某些内容,但这似乎与grpc-gateway实现不一致。为什么REST与gRPC有效负载会采用不同的格式?还是我错过了某种告诉protoc-gen-swagger不将消息转换为字符串的方法?
答案 0 :(得分:1)
我对protoc-gen-swagger本身并不熟悉,但是我相信这是由于这里定义的json-proto格式而发生的:
https://developers.google.com/protocol-buffers/docs/proto3#json
通过这种方式可以使基于JSON的API更“自然”。
除了使用您自己的类型而不是google.protobuf.Timestamp
来保存时间戳之外,我不知道有什么方法可以避免这种情况。但是,预计JSON转换可以在两个方向上正常工作,因此当库将JSON转换回原始消息时,它不会造成任何问题。