🚨
protovalidate を試す
こんにちは。Enabling team の山本です。
2023年6月2回目は、connect-go の protovalidate についてです。
弊社では、現在、新サービスにおいて gRPC を使った開発を行っています。
今回新たに公開された protovalidate の設定と実装方法について、みていきます。
今回の code は、こちらです。
TL;DR
- protoc-gen-validate の後継です。
- validation を CEL(Common Expression Language) で定義できる Library です。
Usage
今回は、name
が5文字以上を必須としました。
message GreetRequest {
// string name = 1;
string name = 1 [(buf.validate.field).cel = {
id: "name",
message: "name must be at least 4 characters.",
expression: "this.size() > 4"
}];
}
rm -rf gen/
buf generate
go run ./cmd/server/main.go
OK
- request を送信して、validation を確認します。
2023/06/12 02:05:53 validation succeeded
2023/06/12 02:05:53 Request headers: map[Accept:[*/*] Content-Length:[19] Content-Type:[application/json] User-Agent:[curl/7.74.0]]
NG
2023/06/12 02:06:01 validation failed: validation error:
- name: name must be at least 4 characters. [name]
2023/06/12 02:06:01 Request headers: map[Accept:[*/*] Content-Length:[16] Content-Type:[application/json] User-Agent:[curl/7.74.0]]
Summary
Powered by Google's Common Expression Language (CEL), it provides a flexible and efficient foundation for defining and evaluating custom validation rules. The primary goal of protovalidate is to help developers ensure data consistency and integrity across the network without requiring generated code.
公式に書いてある通り、より柔軟な validation が可能になりました。
protovalidate の一番の難点は、CEL だと思います。
慣れていないため、構文を正しく書くのが難しい。
今回、CEL は、ChatGPT を利用して作成しました。
なお、protovalidate は、現在、beta
です。
開発の推移を見守りながら、Production に反映させていきたいと思います。
Discussion