web-dev-qa-db-ja.com

パラメーターなしのProtobuf RPCサービスメソッド

GoogleのProtocol Buffersを使用してRPCサービスを記述しようとしています

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

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

この定義をコンパイルしようとすると、WhoAreYou()ピースを指すエラー_Expected type name_が表示されます。

WhoAreYou()WhoAreYou(Whoami)に置き換えると正常に機能しますが、この場合、メソッドにパラメーターは不要です。これを行う方法はありますか、それとも単にサポートされていませんか?

31

入力タイプを指定する必要があります。メソッドがパラメータを受け取らないようにするには、次のように空のメッセージタイプを定義します。

message WhoAreYouParams {}

これが必要な理由は、後でオプションのパラメーターを追加する必要がある場合に、既存のコードを壊すことなく追加できるようにするためです。

51
Kenton Varda

独自の空のメッセージの代わりにgoogle.protobuf.Emptyを指定できます。例:

rpc WhoAreYou(google.protobuf.Empty) returns (Whoami) {
}

適切なプロトファイルをインポートすることを忘れないでください:

import "google/protobuf/empty.proto";
18
Alex