bufbuild/protovalidate-go

GitHub: bufbuild/protovalidate-go

protovalidate-go 是 Protobuf 语义验证框架 Protovalidate 的 Go 实现,通过声明式注解和 CEL 表达式在 Protobuf schema 层面实现数据校验,替代 protoc-gen-validate。

Stars: 477 | Forks: 35

[![Buf logo](https://static.pigsec.cn/wp-content/uploads/repos/cas/19/1909027305f974fe55cf8ba75768f9a0bbb274ec6a7b0f7d0161ffed6b89f578.svg)][buf] # protovalidate-go [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/bufbuild/protovalidate-go/actions/workflows/ci.yaml) [![一致性测试](https://static.pigsec.cn/wp-content/uploads/repos/cas/fe/fe0b40f74be9dc7de37cc0da7d8803ffce162054ceef2f6e6263d8a4ed2f6a01.svg)](https://github.com/bufbuild/protovalidate-go/actions/workflows/conformance.yaml) [![报告卡](https://goreportcard.com/badge/buf.build/go/protovalidate)](https://goreportcard.com/report/buf.build/go/protovalidate) [![GoDoc](https://pkg.go.dev/badge/buf.build/go/protovalidate.svg)](https://pkg.go.dev/buf.build/go/protovalidate) [![BSR](https://img.shields.io/badge/BSR-Module-0C65EC)][buf-mod] [Protovalidate][protovalidate] 是用于 Protobuf 的语义验证库。它提供了标准注解来验证 message 和 field 上的通用规则,并且能够使用 [CEL][cel] 编写自定义规则。它是 [protoc-gen-validate][protoc-gen-validate] 的下一代替代方案。 使用 Protovalidate,你可以使用标准和自定义验证规则来注解你的 Protobuf message: ``` syntax = "proto3"; package acme.user.v1; import "buf/validate/validate.proto"; message User { string id = 1 [(buf.validate.field).string.uuid = true]; uint32 age = 2 [(buf.validate.field).uint32.lte = 150]; // We can only hope. string email = 3 [(buf.validate.field).string.email = true]; string first_name = 4 [(buf.validate.field).string.max_len = 64]; string last_name = 5 [(buf.validate.field).string.max_len = 64]; option (buf.validate.message).cel = { id: "first_name_requires_last_name" message: "last_name must be present if first_name is present" expression: "!has(this.first_name) || has(this.last_name)" }; } ``` 一旦你将 `protovalidate-go` 添加到你的项目中,验证将是符合 Go 惯用法的: ``` if err = protovalidate.Validate(moneyTransfer); err != nil { // Handle failure. } ``` ## 安装 要安装该包,请在你的 Go module 中使用 `go get`: ``` go get buf.build/go/protovalidate ``` ## 文档 Protovalidate 的详细文档可在 [protovalidate.com][protovalidate] 上获取。 面向 Go 开发者的亮点包括: * [开发者快速入门][quickstart] * 针对 [Connect][connect-go] 和 [gRPC][grpc-go] 的详细 RPC 快速入门 * 面向 [protoc-gen-validate 迁移指南][migration-guide] 用户的说明 Go 的 API 文档可在 [pkg.go.dev][pkg-go] 上获取。 ### 原生标准验证规则 protovalidate-go 为标准验证规则处理提供了原生支持。它们默认启用,可以通过设置 ValidatorOption `WithDisableNativeRules` 来禁用。 我们继续验证原生规则和 CEL 规则是否会产生相同的结果。`compliance` Makefile target 已被更新为运行两次, 一次启用原生规则,一次启用 CEL 规则。 ## 其他语言和仓库 Protovalidate 不仅仅适用于 Go!你可能对其他语言的相关仓库感兴趣: - [`protovalidate-java`][pv-java] (Java) - [`protovalidate-python`][pv-python] (Python) - [`protovalidate-cc`][pv-cc] (C++) - [`protovalidate-es`][pv-es] (TypeScript 和 JavaScript) 此外,[protovalidate 的核心仓库](https://github.com/bufbuild/protovalidate)提供: - [Protovalidate 的 Protobuf API][validate-proto] - 用于 `protovalidate` 实现验收测试的[一致性测试工具][conformance] ## 法律条款 在 [Apache 2 许可证][license] 下提供。
标签:EVTX分析, Go, Protocol Buffers, Python工具, Ruby工具, SOC Prime, 中间件, 开发工具, 数据验证, 日志审计