Может ли любой клиент сгенерировать файл .proto с сервера?

Я видел, что интерфейс командной строки Evans можно использовать для определения открытых сообщений и сеансов на сервере из настройки клиента. Возможно ли, что файл .proto, используемый сервером (содержащий сообщения и сведения о сеансе), может быть сгенерирован при настройке клиента? Если да, то как и если нет, то как Эванс может получить доступ к этим сообщениям?

Я новичок в концепциях gRPC, так что это было бы очень полезно. Единственное, что я знаю, это то, что в GoLang мы используем отражатель, чтобы позволить Evans CLI получать доступ к сообщениям и службам.


person shrey khare    schedule 19.07.2019    source источник


Ответы (1)


Сервер может включить отражение, чтобы вы могли видеть зарегистрированные RPC и прото-сообщения. Вот общая аннотация об этом:

https://github.com/grpc/grpc/blob/master/doc/server-reflection.md

Вы можете использовать grpc_cli, который упакован как часть gRPC, чтобы получить список RPC и протоколов сообщений, как описано здесь:

https://grpc.github.io/grpc/cpp/md_doc_server_reflection_reflection_ >

$ grpc_cli ls localhost:50051

выход:

helloworld.Greeter
grpc.reflection.v1alpha.ServerReflection
$ grpc_cli ls localhost:50051 helloworld.Greeter -l

output, где «служебная» часть показывает, как должен выглядеть прототип, а также содержит имя файла прототипа.

filename: helloworld.proto
package: helloworld;
service Greeter {
  rpc SayHello(helloworld.HelloRequest) returns (helloworld.HelloReply) {}
}

Чтобы получить информацию о сообщении, вы можете использовать это:

$ grpc_cli type localhost:50051 helloworld.HelloRequest

выход:

message HelloRequest {
  optional string name = 1;
}

grpc_cli - это официальный инструмент, входящий в пакет grpc. Evans CLI - это сторонний клиент, использующий общедоступные API для генерации той же информации. Пока сервер экспортирует его, вы можете получить к нему доступ программно в своем коде (первая ссылка также содержит указатели на другие языки), в сценарии с использованием grpc_cli или с использованием сторонних клиентов. Затем вы можете взять информацию, экспортированную с сервера, чтобы создать свои собственные прото-файлы.

Однако, если сервер не поддерживает отражение, вам не повезло.

person QOTJ    schedule 25.07.2019