如何在Protobuf服务rpc中返回一个数组

Sho*_*ham 26 rpc protocol-buffers

我的.proto文件中有以下架构:

service MyService {
    rpc GetItem (ItemQuery) returns (Item) {
    }
}

message ItemQuery {
    int id = 1;
}
message Item {
    int id = 1;
    string name = 2;
}
Run Code Online (Sandbox Code Playgroud)

现在我想添加另一个rpc方法来返回多个Items.像这样的东西:

rpc GetItems (ItemsQuery) returns (repeated Item) {
}
Run Code Online (Sandbox Code Playgroud)

有没有比定义Items消息更好的方法呢?

Sho*_*ham 44

选项1 - 使用流:

rpc GetItems (ItemsQuery) returns (stream Item) {
}
Run Code Online (Sandbox Code Playgroud)

选项2 - 设置将使用重复对象的响应消息:

service MyService {
    rpc GetItem (ItemQuery) returns (ItemResponse) {
    }
}

message ItemQuery {
    int id = 1;
}
message ItemResponse {
    repeated Item items = 1;
}
message Item {
    int id = 1;
    string name = 2;
}
Run Code Online (Sandbox Code Playgroud)

  • 选项1是一个流,它意味着您将返回一个迭代器,这意味着即使在服务器完成所有这些项目的发送之前,您也可以在客户端上开始处理这些项目.选项2是一个响应对象,其中包含您的项目列表.您可以为ItemResponse添加一些其他属性(一些元数据等)...... (8认同)
  • 我参加聚会迟到了,但是:选项 2 比选项 1 有什么优势,反之亦然? (3认同)