web-dev-qa-db-fra.com

Méthode Protobuf RPC Service sans paramètres

J'essaie de décrire un service RPC en utilisant les tampons de protocole de Google

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

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

Lorsque j'essaie de compiler cette définition, j'obtiens une erreur Expected type name Pointant vers la pièce WhoAreYou().

Cela fonctionne très bien si je remplace WhoAreYou() par WhoAreYou(Whoami), mais dans ce cas, la méthode n'a pas besoin de paramètres. Existe-t-il un moyen de le faire ou n'est-il simplement pas pris en charge?

31
Michael Robinson

Vous devez spécifier un type d'entrée. Si vous ne voulez pas que la méthode prenne des paramètres, définissez un type de message vide, comme:

message WhoAreYouParams {}

La raison pour laquelle cela est nécessaire est que si vous devez ajouter un paramètre facultatif ultérieurement, vous pouvez le faire sans casser le code existant.

51
Kenton Varda

Vous pouvez spécifier google.protobuf.Empty au lieu de votre propre message vide. Exemple:

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

N'oubliez pas d'importer le fichier proto approprié:

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