protoc-gen-validate 使用教程

protoc-gen-validate 使用教程

protoc-gen-validate Protocol Buffer Validation - Being replaced by github.com/bufbuild/protovalidate 项目地址: https://gitcode.com/gh_mirrors/pr/protoc-gen-validate

1. 项目介绍

protoc-gen-validate(PGV)是一个用于生成多语言消息验证器的 protoc 插件。虽然 Protocol Buffers 能够有效地保证数据的类型,但它们无法强制执行值的语义规则。这个插件通过在生成的代码中添加验证支持,来解决这个问题。开发者可以在 .proto 文件中使用 PGV 扩展,并通过注解来定义字段值的约束规则。

PGV 目前处于维护模式,推荐新项目和现有项目迁移到 protovalidate

2. 项目快速启动

安装依赖

首先,确保你已经安装了以下依赖:

  • Go 工具链(≥ v1.7)
  • protoc 编译器
  • protoc-gen-validate 插件
  • 目标语言的官方插件

下载并安装 PGV

你可以从 GitHub Releases 下载预编译的二进制文件,或者从源码构建:

# 从源码构建
go get -d github.com/envoyproxy/protoc-gen-validate
cd $GOPATH/src/github.com/envoyproxy/protoc-gen-validate
make build

生成验证代码

假设你有一个名为 example.proto 的文件,你可以使用以下命令生成验证代码:

protoc \
  -I . \
  -I path/to/validate/ \
  --go_out=":.generated" \
  --validate_out="lang=go:.generated" \
  example.proto

生成的代码将包含 Validate()ValidateAll() 方法,用于验证消息的有效性。

3. 应用案例和最佳实践

案例1:验证用户输入

假设你有一个 Person 消息,你希望确保 id 大于 999,email 是有效的邮箱地址,name 符合特定的模式,并且 home 字段是必需的。

syntax = "proto3";
package examplepb;

import "validate/validate.proto";

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: "^[A-Za-z]+( [A-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}];
}

最佳实践

  • 使用 Validate() 方法:在处理用户输入时,始终调用 Validate() 方法来确保数据的完整性和有效性。
  • 自定义错误处理:根据业务需求,自定义错误处理逻辑,以便更好地向用户反馈错误信息。

4. 典型生态项目

1. protovalidate

protovalidateprotoc-gen-validate 的继任者,设计用于解决 PGV 的局限性,并提供更好的验证功能。

2. buf

buf 是一个现代化的 Protocol Buffers 工具链,支持 protoc-gen-validate 插件,并提供了更简洁的配置方式。

3. gRPC

gRPC 是一个高性能、开源的 RPC 框架,广泛用于微服务架构中。protoc-gen-validate 可以与 gRPC 结合使用,确保在服务间传递的消息的有效性。

通过以上步骤,你可以快速上手并使用 protoc-gen-validate 来增强你的 Protocol Buffers 项目的数据验证能力。

protoc-gen-validate Protocol Buffer Validation - Being replaced by github.com/bufbuild/protovalidate 项目地址: https://gitcode.com/gh_mirrors/pr/protoc-gen-validate

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

缪昱锨Hunter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值