2017-04-02 24 views
5

benim .proto dosyasında aşağıdaki şema var:Nasıl Protobuf hizmet rpc bir dizi dönmek

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

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

Şimdi birden Ürünleri dönmek için başka bir rpc yöntemi eklemek istiyorum. Böyle şey:

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

bir Öğeler mesajı bunu daha tanımlamak için daha iyi bir yolu var mı?

cevap

10

Seçenek 1 - Kullanım akışı:

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

Seçenek 2 - tekrarlanan bir nesneyi kullanacak bir yanıt mesajı ayarlayın:

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

parti için geciktim, fakat: seçenek 2 mu Seçenek 1 'e göre avantajları var mı, tersi mi? – LuMa

+1

Seçenek 1 bir akıştır, bir yineleyici döndürdüğünüz anlamına gelir ve bu, öğelerin tümünü göndermeyi bitirmeden önce Öğeleri istemcide işlemeye başlayabileceğiniz anlamına gelir. Seçenek 2, Öğelerinizin listesini içeren bir yanıt nesnesidir. ItemResponse'nize (bazı meta veriler vb.) Başka özellikler ekleyebilirsiniz ... – Shoham