Protobuf RPC Service method without parameters

Michael Robinson picture Michael Robinson · Apr 17, 2015 · Viewed 23.3k times · Source

I'm trying to describe an RPC service using Google's Protocol Buffers

service WhoamiService {
  rpc WhoAreYou() returns (Whoami) {}
}

message Whoami {
  optional bytes request_id = 1;
  optional string hostname = 2;
  optional string message = 3;
}

When I try to compile this definition, I get an error Expected type name pointing to the WhoAreYou() piece.

It works fine if I replace WhoAreYou() with WhoAreYou(Whoami), but in this case, the method does not need any parameters.. Is there a way to do this or is it simply not supported?

Answer

Kenton Varda picture Kenton Varda · Apr 17, 2015

You have to specify an input type. If you don't want the method to take any parameters, define an empty message type, like:

message WhoAreYouParams {}

The reason this is required is so that if you later need to add an optional parameter, you can do so without breaking existing code.