鉴于我有多个模型,每个模型都需要有自己的创建/获取/获取列表 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 关注
- 294 浏览
添加回答
举报
0/150
提交
取消
