鑒于我有多個模型,每個模型都需要有自己的創建/獲取/獲取列表 API。我是否需要為每個模型添加兩種不同類型的消息(單個和列表)?例如:如果我有一個學生類型 -message Student{ string name = 1;}和一個RPC:rpc CreateStudent(Student) returns (google.protobuf.Empty){ .............. }如果我想添加一個 rpc 來創建學生列表,或者獲取學生列表rpc CreateStudends(??????) returns (google.protobuf.Empty){ .............. }rpc GetAllStudents() returns (??????){ .............. }我是否還需要定義message StudentList{ repeated Student students = 1;}或者有沒有辦法在消息輸入/輸出中直接使用列表類型?
2 回答

隔江千里
TA貢獻1906條經驗 獲得超10個贊
是的,基本上 - 您會希望每個元素類型有不同的消息類型,或者可能需要具有oneof
樣式內容的單個根類型。原始 protobuf 不包含泛型或模板的概念。
一些庫可以,但是:這超出了規范。

婷婷同學_
TA貢獻1844條經驗 獲得超8個贊
您可以簡單地將stream關鍵字添加到您的 RPC。無需將消息字段定義為重復,stream將發送或接收多個獨立消息。
message Student {
string name = 1;
}
使用 RPC:
rpc CreateStudent(Student) returns (google.protobuf.Empty) {
..............
}
rpc CreateStudents(stream Student) returns (google.protobuf.Empty) {
..............
}
rpc GetAllStudents() returns (stream Student) {
..............
}
發送/流式傳輸響應對象而不是空的是一種很好的做法。否則,您只有 gRPC 響應代碼來指示問題,并且需要參考日志進行調試。
- 2 回答
- 0 關注
- 160 瀏覽
添加回答
舉報
0/150
提交
取消