2017-04-02 17 views
5

Mam następujący schemat w moim pliku .proto:Jak zwrócić tablicę w Protobuf usługi RPC

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

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

teraz chcę dodać inną metodę RPC do powrotu wielu elementów. coś takiego:

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

Czy istnieje lepszy sposób to zrobić niż zdefiniować komunikat maszyn?

Odpowiedz

10

Wariant 1 - Wykorzystanie stream:

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

Wariant 2 - Zestaw komunikat odpowiedzi, który będzie korzystał z powtarzającego się obiekt:

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

spóźnię się na imprezę, ale: Czy opcja 2 mieć przewagę nad opcją 1 lub na odwrót? – LuMa

+1

Opcja 1 jest strumieniem, oznacza to, że zwracasz iterator, co oznacza, że ​​możesz rozpocząć przetwarzanie elementów na kliencie, nawet zanim serwer zakończy wysyłanie ich wszystkich. Opcja 2 jest obiektem odpowiedzi, który zawiera listę twoich Przedmioty. Możesz dodać kilka innych właściwości do ItemResponse (niektóre metadane itp.) ... – Shoham

Powiązane problemy