Валидация Protobuf#
Рассмотрим в качестве примера proto-файл.
syntax = "proto3";
import "validate/validate.proto";
package protobuf;
option java_outer_classname = "Data";
message Person {
uint64 id = 1 [(validate.rules).uint64.gt = 999];
string email = 2 [(validate.rules).string.email = true];
string name = 3 [(validate.rules).string = {
pattern: "[0-9A-Za-z]*$",
max_bytes: 256,
}];
Location home = 4 [(validate.rules).message.required = true];
}
message Location {
double lat = 1 [(validate.rules).double = { gte: -90, lte: 90 }];
double lng = 2 [(validate.rules).double = { gte: -180, lte: 180 }];
}
Далее в таблице представлен разбор proto-файла с комментариями.
Proto-файл - элементы#
Название |
Обязательность |
Описание |
Возможные значения |
Значение по умолчанию |
|---|---|---|---|---|
|
Обязательный |
Версия синтаксиса proto-файла. На текущий момент поддерживается только версия «proto3» |
|
— |
|
Обязательный |
Подключение библиотеки валидатора protoc-gen-validate (pgv) |
— |
— |
|
Обязательный |
Объявление пакета |
Строковое значение |
— |
|
Обязательный |
Имя генерируемого java-класса. Следует запомнить значения параметров |
Строковое значение |
— |
Поля сообщения (например, |
Опциональный |
Тип, имя параметра, уникальный номер и правила валидации в квадратных скобках. Синтаксис и примеры правил валидации: https://github.com/envoyproxy/protoc-gen-validate#constraint-rules. Подробнее об уникальных номерах и типах данных: https://developers.google.com/protocol-buffers/docs/proto3 |
Зависит от типа поля и правил валидации |
— |
Вложенные сообщения (например, |
Опциональный |
Объявление параметра с типом другого сообщения. Можно объявлять несколько типов сообщений в одном proto-файле, а также объявлять экземпляры одного типа внутри другого |
Зависит от структуры сообщения |
— |
Ограничения по .proto схемам:
все .proto схемы должны иметь указание опций
java_packageиjava_outer_classnameдля корректной генерации кода для валидации;опции
java_outer_classnameсреди всех .proto схем должны иметь уникальное значение;для использования конструкций по валидации полей в .proto файлах необходимо добавить
import "validate/validate.proto";при обработке импортов в proto-файлах, импортируемый файл ищется в следующем порядке:
относительно текущего расположения обрабатываемого файла;
относительно корневой директории с кастомными ресурсами профиля.