Protovalidate 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, the only widely used validation library for Protobuf.
With Protovalidate, you can annotate your Protobuf messages with both standard and custom validation rules:
syntax = "proto3";
package banking.v1;
import "buf/validate/validate.proto";
message MoneyTransfer {
string to_account_id = 1 [
// Standard rule: `to_account_id` must be a UUID.
(buf.validate.field).string.uuid = true
];
string from_account_id = 2 [
// Standard rule: `from_account_id` must be a UUID.
(buf.validate.field).string.uuid = true
];
// Custom rule: `to_account_id` and `from_account_id` can't be the same.
option (buf.validate.message).cel = {
id: "to_account_id.not.from_account_id"
message: "to_account_id and from_account_id should not be the same value"
expression: "this.to_account_id != this.from_account_id"
};
}
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 github.com/bufbuild/protovalidate-go
Comprehensive documentation for Protovalidate is available in Buf's documentation library.
Highlights for Go developers include:
- The developer quickstart
- Comprehensive RPC quickstarts for Connect and gRPC
- A migration guide for protoc-gen-validate users
API documentation for Go is available on pkg.go.dev.
Protovalidate 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, coming soon!)
Additionally, protovalidate's core repository provides:
- Protovalidate's Protobuf API
- Conformance testing utilities for acceptance testing of
protovalidate
implementations
We genuinely appreciate any help! If you'd like to contribute, check out these resources:
- Contributing Guidelines: Guidelines to make your contribution process straightforward and meaningful
- Conformance testing utilities: Utilities providing acceptance testing of
protovalidate
implementations - Go conformance executor: Conformance testing executor for
protovalidate-go
- Buf: Enterprise-grade Kafka and gRPC for the modern age
- Common Expression Language (CEL): The open-source technology at the core of Protovalidate
Offered under the Apache 2 license.