Различия аннотаций gRPC и Swagger - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть определение буфера протокола, которое включает в себя google.protobuf.Timestamp как часть сообщения.Сообщение Timestamp довольно простое и имеет следующее определение:

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

Таким образом, полезная нагрузка gRPC выглядит как простой набор значений, как и ожидалось.Однако я также хотел сгенерировать некоторые аннотации для REST API для того же сообщения, но, похоже, он преобразовал метку времени в строку стиля RFC 3339:

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

Я недавно начал работать с буферами протокола и gRPC,поэтому я не уверен, что я что-то здесь упускаю, но, похоже, это противоречит реализации grpc-gateway.Почему REST был бы другим форматом, чем полезная нагрузка gRPC?Или я упускаю какой-то способ сказать protoc-gen-swagger не преобразовывать сообщение в строку?

1 Ответ

0 голосов
/ 14 ноября 2018

Я не очень знаком с самим protoc-gen-swagger, но я полагаю, что это происходит из-за формата json-proto, определенного здесь:

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

Это сделано такспособ сделать его более "естественным" для API на основе JSON.Я не знаю ни одного способа избежать этого, кроме как использовать свой собственный тип для хранения временной метки вместо google.protobuf.Timestamp.Однако ожидается, что преобразование JSON будет работать правильно в обоих направлениях, поэтому, когда библиотека преобразует JSON обратно в прототип сообщения, это не должно вызывать никаких проблем.

...