gRPC 和 Swagger 注解区别
gRPC and Swagger annotation differences
我有一个协议缓冲区定义,其中包括 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 不要将消息转换为字符串?
我不太熟悉 protoc-gen-swagger 本身,但我相信这是因为这里定义的 json-proto 格式:
https://developers.google.com/protocol-buffers/docs/proto3#json
这样做是为了让基于 JSON 的 API 更 "natural"。
除了使用您自己的类型而不是 google.protobuf.Timestamp
来保存时间戳外,我不知道有什么方法可以避免这种情况。但是,JSON 转换应该在两个方向上都能正常工作,所以当 JSON 被库转换回原始消息时,应该不会造成任何问题。
我有一个协议缓冲区定义,其中包括 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 不要将消息转换为字符串?
我不太熟悉 protoc-gen-swagger 本身,但我相信这是因为这里定义的 json-proto 格式:
https://developers.google.com/protocol-buffers/docs/proto3#json
这样做是为了让基于 JSON 的 API 更 "natural"。
除了使用您自己的类型而不是 google.protobuf.Timestamp
来保存时间戳外,我不知道有什么方法可以避免这种情况。但是,JSON 转换应该在两个方向上都能正常工作,所以当 JSON 被库转换回原始消息时,应该不会造成任何问题。