Reflection
Server reflection is an optional extension, which describes services, implemented on the server.
In examples we will use grpc_cli
command-line tool and helloworld
example. We will use
extend()
method to add
server reflection.
Then we will be able to…
List services on the server:
$ grpc_cli ls localhost:50051
helloworld.Greeter
List methods of the service:
$ grpc_cli ls localhost:50051 helloworld.Greeter -l
filename: helloworld/helloworld.proto
package: helloworld;
service Greeter {
rpc SayHello(helloworld.HelloRequest) returns (helloworld.HelloReply) {}
}
Describe messages:
$ grpc_cli type localhost:50051 helloworld.HelloRequest
message HelloRequest {
string name = 1;
}
Call simple methods:
$ grpc_cli call localhost:50051 helloworld.Greeter.SayHello "name: 'Dr. Strange'"
connecting to localhost:50051
message: "Hello, Dr. Strange!"
Rpc succeeded with OK status
And all of these done without downloading .proto files and compiling them into other source files in order to create stubs.
Reference
- class grpclib.reflection.service.ServerReflection(*, _service_names: Collection[str])
Implements server reflection protocol.
- classmethod extend(services: Collection[IServable]) List[IServable]
Extends services list with reflection service:
from grpclib.reflection.service import ServerReflection services = [Greeter()] services = ServerReflection.extend(services) server = Server(services) ...
Returns new services list with reflection support added.