Декларации сообщений¶
От меня
В книге автор часто приводит примеры сгенерированного по файлу .proto кода. Он, конечно, несёт иллюстративную ценность, но, кажется, что желающие могут сгенерировать его и посмотреть сами. Так что примеры сгенерированного кода я почти везде опущу.
Третья секция файла proto посвящена декларации сообщений. Сообщения - это, по сути, входные и выходные параметры, объёдинённые в общие сущности.
Синтаксис декларации сообщений поддерживает следующее:
- Скалярные типы;
- Коллекции;
- Перечисления (Enum);
- Вложенные типы;
- Импорт типов;
- Известные типы: Любой (Any), Значение (Value), Обёртка (Wrapper), Дата и Время;
- Бинарные данные (Bytes);
- “Один из” (One of);
- Пустые сообщения;
- Комментарии.
Также представленный синтаксис НЕ поддерживает следующее:
- Наследование;
- Валидацию сообщений. В отличие от версии 2, версия 3 предполагает, что верифицирование сообщений будет происходить в коде клиента и/или сервера;
- Отсутствие сообщения как параметра функции; даже если вашей функции не нужны входные параметры или она ничего не возвращает, обязательно задать сообщение без параметров.
Наконец, все сообщения подчиняются следующему правилу: задаются при помощи ключевого слова message, а все свойства по умолчанию необязательны. Каждому свойству должен присваиваться уникальный номер позиции. Также нужно отметить, что сгенерированные для сообщения классы наследуются от интерфейса IMessage<T>.
Вот пример задания сообщения CountryReply с тремя свойствами:
Скалярные типы¶
Коллекции¶
Перечисления (Enums)¶
Вложенные типы¶
Синтаксис Protocol Buffers поддерживает вложенные типы. В примере тип сообщения Continent определяется прямо внутри сообщения CountryReply.
message CountryReply {
message Continent {
string Name = 1;
}
int32 CountryId = 1;
Continent continent = 2; //Капитализация у типа и имени поля должна отличаться
}
Импорт типов¶
Определения можно хранить в раздельных файлах, импортируя их в нужные файлы определений сервисов. Это позволяет добиться переиспользования кода.
В синтаксисе Protocol Buffers импорт задаётся при помощи ключевого слова import и указания пути к нужному файлу. Путь указывается относительно директории выполнения компиляции, выполняемой инструментом Protoc (Protocol Buffer Compiler). В примере мы импортируем определение сообщения Continent.
Известные типы (Well-Known Types)¶
Байты¶
Один из (One of)¶
Пустые сообщения¶
Комментарии¶
Дата создания : 6 апреля 2023 г.