Клиенты proto3 grpc: могут ли все они опускать поля отправки сообщений?

Учитывая следующее определение прототипа. Могут ли все автоматически сгенерированные клиенты grpc, созданные с помощью генерации кода Google, опускать поля отправки в PagingInfo?

В клиенте python я могу не отправлять это поле, используя такой код:

request = SearchRequest(paging_info=dict(a=OptionalField(d='d', e='e')), query='blah') 

Определение протокола grpc:

syntax = "proto3";

message OptionalField {
  string d = 1;
  string e = 2;
}

message PagingInfo {
  OptionalField a = 1;
  OptionalField b = 2;
  OptionalField c = 3;
}

message SearchRequest {
  string query = 1;
  PagingInfo paging_info = 2;
}

message SearchResponse {
  string a = 1;
}

service SearchService {
    rpc Search (SearchRequest) returns (SearchResponse);
}

person spacether    schedule 20.04.2021    source источник


Ответы (1)


В proto3 все элементы считаются optional (в смысле proto2), так что да: любая совместимая реализация должна иметь возможность отправлять сообщение, которое пропускает этот элемент.

person Marc Gravell    schedule 20.04.2021