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?
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.
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";