Как вернуть массив в службе Protobuf rpc

У меня есть следующая схема в моем файле .proto:

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

message ItemQuery {
    int id = 1;
}
message Item {
    int id = 1;
    string name = 2;
}

Теперь я хочу добавить еще один метод rpc для возврата нескольких элементов. Что-то вроде этого:

rpc GetItems (ItemsQuery) returns (repeated Item) {
}

Есть ли лучший способ сделать это, чем определить сообщение "Элементы"?

Ответы

Ответ 1

Вариант 1 - Использовать поток:

rpc GetItems (ItemsQuery) returns (stream Item) {
}

Вариант 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;
}