为了账号安全,请及时绑定邮箱和手机立即绑定

返回消息列表

返回消息列表

Go
扬帆大鱼 2022-04-26 14:34:10
鉴于我有多个模型,每个模型都需要有自己的创建/获取/获取列表 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 不包含泛型或模板的概念。

一些库可以,但是:这超出了规范。


查看完整回答
反对 回复 2022-04-26
?
婷婷同学_

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 响应代码来指示问题,并且需要参考日志进行调试。


查看完整回答
反对 回复 2022-04-26
  • 2 回答
  • 0 关注
  • 294 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号