gRPC集成protoc-gen-validate

本文介绍了如何在gRPC中集成protoc-gen-validate进行参数验证。内容包括protoc-gen-validate的安装、配置,以及如何在proto文件中定义验证规则。同时,提供了在服务端和客户端使用拦截器进行验证的示例代码。
摘要由CSDN通过智能技术生成

protoc-gen-validate简介

安装和配置 Linux
执行make build之前需要先切换到protoc-gen-validate路径下;因为make build执行的就是这个路径下的Makefile;一定要确保在对应的路径下,这样make build才不会出错

fetches this repo into $GOPATH

go get -d github.com/envoyproxy/protoc-gen-validate

installs PGV into $GOPATH/bin

make build
Windows
0.6.7版本exe下载地址
最新版本exe(页面查找)
下载完成后需要将exe文件拷贝到 go的根补录的bin目录下

代码 proto hello.proto
syntax = “proto3”;
option go_package = “.;proto”;
import “validate.proto”;

service Greeter{
rpc SayHello(Person) returns (Person);
}

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: “[u4e00-u9fa5]”,
max_bytes: 30,
}];

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}];
}
}
validate.proto
validate.proto再hello.proto有引用;可以直接再validate.protocopy出来一份放到与hello.proto的同级目录下,也可以直接复制下面的代码

syntax = “proto2”;
package validate;

option go_package = “github.com/envoyproxy/protoc-gen-validate/validate”;
option java_package = “io.envoyproxy.pgv.validate”;

import “google/protobuf/descriptor.proto”;
import “google/protobuf/duration.proto”;
import “google/protobuf/timestamp.proto”;

// Validation rules applied at the message level
extend google.protobuf.MessageOptions {
// Disabled nullifies any validation rules for this message, including any
// message fields associated with it that do support validation.
optional bool disabled = 1071;
// Ignore skips generation of validation methods for this message.
optional bool ignored = 1072;
}

// Validation rules applied at the oneof level
extend google.protobuf.OneofOptions {
// Required ensures that exactly one the field options in a oneof is set;
// validation fails if no fields in the oneof are set.
optional bool required = 1071;
}

// Validation rules applied at the field level
extend google.protobuf.FieldOptions {
// Rules specify the validations to be performed on this field. By default,
// no validation is performed against a field.
optional FieldRules rules = 1071;
}

// FieldRules encapsulates the rules for each type of field. Depending on the
// field, the correct set should be used to ensure proper validations.
message FieldRules {
optional MessageRules message = 17;
oneof type {
// Scalar Field Types
FloatRules float = 1;
DoubleRules double = 2;
Int32Rules int32 = 3;
Int64Rules int64 = 4;
UInt32Rules uint32 = 5;
UInt64Rules uint64 = 6;
SInt32Rules sint32 = 7;
SInt64Rules sint64 = 8;
Fixed32Rules fixed32 = 9;
Fixed64Rules fixed64 = 10;
SFixed32Rules sfixed32 = 11;
SFixed64Rules sfixed64 = 12;
BoolRules bool = 13;
StringRules string = 14;
BytesRules bytes = 15;

// Complex Field Types
EnumRules     enum     = 16;
RepeatedRules repeated = 18;
MapRules      map      = 19;

// Well-Known Field Types
AnyRules       any       = 20;
DurationRules  duration  = 21;
TimestampRules timestamp = 22;

}
}

// FloatRules describes the constraints applied to float values
message FloatRules {
// Const specifies that this field must be exactly the specified value
optional float const = 1;

// Lt specifies that this field must be less than the specified value,
// exclusive
optional float lt = 2;

// Lte specifies that this field must be less than or equal to the
// specified value, inclusive
optional float lte = 3;

// Gt specifies that this field must be greater than the specified value,
// exclusive. If the value of Gt is larger than a specified Lt or Lte, the
// range is reversed.
optional float gt = 4;

// Gte specifies that this field must be greater than or equal to the
// specified value, inclusive. If the value of Gte is larger than a
// specified Lt or Lte, the range is reversed.
optional float gte = 5;

// In specifies that this field must be equal to one of the specified
// values
repeated float in = 6;

// NotIn specifies that this field cannot be equal to one of the specified
// values
repeated float not_in = 7;

// IgnoreEmpty specifies that the validation rules of this field should be
// evaluated only if the field is not empty
optional bool ignore_empty = 8;
}

// DoubleRules describes the constraints applied to double values
message DoubleRules {
// Const specifies that this field must be exactly the specified value
optional double const = 1;

// Lt specifies that this field must be less than the specified value,
// exclusive
optional double lt = 2;

// Lte specifies that this field must be less than or equal to the
// specified value, inclusive
optional double lte = 3;

// Gt specifies that this field must be greater than the specified value,
// exclusive. If the value of Gt is larger than a specified Lt or Lte, the
// range is reversed.
optional double gt = 4;

// Gte specifies that this field must be greater than or equal to the
// specified value, inclusive. If the value of Gte is larger than a
// specified Lt or Lte, the range is reversed.
optional double gte = 5;

// In specifies that this field must be equal to one of the specified
// values
repeated double in = 6;

// NotIn specifies that this field cannot be equal to one of the specified
// values
repeated double not_in = 7;

// IgnoreEmpty specifies that the validation rules of this field should be
// evaluated only if the field is not empty
optional bool ignore_empty = 8;
}

// Int32Rules describes the constraints applied to int32 values
message Int32Rules {
// Const specifies that this field must be exactly the specified value
optional int32 const = 1;

// Lt specifies that this field must be less than the specified value,
// exclusive
optional int32 lt = 2;

// Lte specifies that this field must be less than or equal to the
// specified value, inclusive
optional int32 lte = 3;

// Gt specifies that this field must be greater than the specified value,
// exclusive. If the value of Gt is larger than a specified Lt or Lte, the
// range is reversed.
optional int32 gt = 4;

// Gte specifies that this field must be greater than or equal to the
// specified value, inclusive. If the value of Gte is lar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值