Protovalidate is the semantic validation library for Protobuf. It provides standard annotations to validate common rules on messages and fields, as well as the ability to use CEL to write custom rules. It's the next generation of protoc-gen-validate.
With Protovalidate, you can annotate your Protobuf messages with both standard and custom validation rules:
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)" }; }
Once you've added protovalidate-go
to your project, validation is idiomatic Go:
if err = protovalidate.Validate(moneyTransfer); err != nil { // Handle failure. }
Tip
The easiest way to get started with Protovalidate for RPC APIs are the quickstarts in Buf's documentation. They're available for both Connect and gRPC.
To install the package, use go get
from within your Go module:
go get buf.build/go/protovalidate
Comprehensive documentation for Protovalidate is available at protovalidate.com.
Highlights for Go developers include:
API documentation for Go is available on pkg.go.dev.
Additional languages and repositoriesProtovalidate isn't just for Go! You might be interested in sibling repositories for other languages:
protovalidate-java
(Java)protovalidate-python
(Python)protovalidate-cc
(C++)protovalidate-es
(TypeScript and JavaScript)Additionally, protovalidate's core repository provides:
protovalidate
implementationsWe genuinely appreciate any help! If you'd like to contribute, check out these resources:
protovalidate
implementationsprotovalidate-go
Offered under the Apache 2 license.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4