Protovalidate provides standard annotations to validate common constraints on messages and fields, as well as the ability to use CEL to write custom constraints. 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-java
to your project, validation is idiomatic Java:
ValidationResult result = validator.validate(message);
if (!result.isSuccess()) {
// Handle failure.
}
Tip
The easiest way to get started with Protovalidate for RPC APIs are the quickstarts in Buf's documentation. There's one available for Java and gRPC.
protovalidate-java
is listed in Maven Central, which provides installation snippets for Gradle, Maven, and other package managers. In Gradle, it's:
dependencies {
implementation 'build.buf:protovalidate:<version>'
}
Comprehensive documentation for Protovalidate is available in Buf's documentation library.
Highlights for Java developers include:
- The developer quickstart
- A comprehensive RPC quickstart for Java and gRPC
- A migration guide for protoc-gen-validate users
Protovalidate isn't just for Java! You might be interested in sibling repositories for other languages:
protovalidate-go
(Go)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
- 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.