Как вернуть массив в Protobuf service rpc

у меня следующая схема в моем :

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

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

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

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

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

1 ответов


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

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;
}