Валидация 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-класса. Следует запомнить значения параметров package и java_outer_classname, так как далее необходимо будет указывать их в конфигурационном файле |
|
Тип, имя параметра, а также его уникальный номер (подробнее об уникальных номерах и возможных типах данных - https://developers.google.com/protocol-buffers/docs/proto3). Помимо этого, в квадратных скобках указываются правила валидации для данного параметра. Синтаксис и примеры по описанию правил валидации можно найти здесь - https://github.com/envoyproxy/protoc-gen-validate#constraint-rules |
|
Объявление параметра home с типом Location. Мы можем объявлять несколько типов сообщений в одном proto-файле, а также объявлять экземпляры одного типа внутри другого. |
message Person {
...
}
message Location {
...
}