web-dev-qa-db-ja.com

grpcサービスには入力パラメータと戻り値が1つずつ必要です

このようなprotoファイルがあるとしましょう。このようなサービスを定義できますか

rpc SayHello () returns (Response) {} //service has no input
rpc SayHello (Request1,Request2) returns (Response) {}//service has two inputs

//.protoファイル

syntax = "proto3";

service Greeter{
    rpc SayHello (Request) returns (Response) {}
}


message Request{
    string request = 1;
}

message Response{
    string response = 1;
}
12
lcm

gRPCサービスメソッドには、1つの入力メッセージと1つの出力メッセージがあります。通常、これらのメッセージはonly oneメソッドへの入力および出力として使用されます。これは、下位互換性を維持しながら、後で(メッセージに)新しいパラメーターを簡単に追加できるようにするためです。

入力または出力パラメーターが必要ない場合は、よく知られているproto google.protobuf.Empty を使用できます。ただし、今後メソッドにパラメーターを追加できなくなるため、これはお勧めできません。代わりに、リクエストに対するメッセージを作成する通常の方法に従うことをお勧めしますが、コンテンツはありません。

service Greeter {
    rpc SayHello (SayHelloRequest) returns (SayHelloResponse) {}
}

message SayHelloRequest {} // service has no input

同様に、2つのリクエストパラメータが必要な場合は、リクエストメッセージに両方を含めるだけです。

message SayHelloRequest { // service has two inputs
    string request = 1;
    string anotherRequestParam = 2;
}
20
Eric Anderson