Перейти к содержанию

Пустые сообщения

Как ранее уже упоминалось, язык Protobuf требует, чтобы у функции обязательно были указаны входное и выходное сообщение, даже если функции это не требуется. Для этого случая есть две возможности.

  • Создать сообщение без свойств;
  • Использовать Well-Known Type Empty.

Например, пусть у нас есть функция GetAll, которая не принимает входных параметров. Определим специальное сообщение EmptyRequest.

service CountryService {
    rpc GetAll(EmptyRequest) returns (CountriesReply) {}
}
message EmptyRequest {

}
message CountriesReply {
    repeated CountryReply = 1;
}
message CountryReply {
    int32 CountryId = 1;
    string CountryName = 2;
}

При этом для вызова такой функции нужно создать объект EmptyRequest и передать его:
// ...
var emptyRequest = new EmptyRequest();
var countries = await countryClient.GetAllAsync(emptyRequest);

Также есть вторая возможность - использовать Empty:
import "google/protobuf/Empty.proto";

service CountryService {
    rpc GetAll(google.protobuf.Empty) returns (CountriesReply) {}
}
message CountriesReply {
    repeated CountryReply = 1;
}
message CountryReply {
    int32 CountryId = 1;
    string CountryName = 2;
}

Однако, как и в первом случае, объект пустого сообщения должен быть создан и передан:
// ...
var emptyRequest = new Empty();
var countries = await countryClient.GetAllAsync(emptyRequest);


Последнее обновление : 23 апреля 2023 г.
Дата создания : 6 апреля 2023 г.

Комментарии

Комментарии