包阅导读总结
1.
关键词:`Protocol Buffer`、`数据验证`、`bufbuild/protovalidate`、`CEL`、`开源项目`
2.
总结:本文介绍了 Protocol Buffer 在默认情况下不进行数据验证,推荐了开源项目 bufbuild/protovalidate,它基于 CEL,在 GitHub 有近 1000 Star,支持多种语言,包括 Go、C++、Java 和 Python 的 beta 版本,文中还举例说明了如何使用及项目的优越性。
3.
主要内容:
– 背景介绍
– 现代软件开发中保证数据完整性和一致性重要,Protocol Buffer 默认不进行数据验证,增加开发复杂度。
– 项目介绍
– bufbuild/protovalidate 是基于 CEL 的 Protobuf 消息验证库。
– 包括 API 定义、文档等,多种语言实现为 beta 版本。
– 如何使用
– 在 Protobuf 消息中定义约束,导入相关文件,添加依赖。
– 给出对 User 名字长度和 Product 价格的约束例子。
– 项目推介
– 是保证 Protocol Buffer 数据完整性和一致性的好选择。
– 所属 bufbuild 组织提供很多有用工具,支持多语言且持续更新。
思维导图:
文章地址:https://mp.weixin.qq.com/s/KUNvBVh_7svC9IJbfJ6vIA
文章来源:mp.weixin.qq.com
作者:精选君
发布时间:2024/8/14 0:30
语言:中文
总字数:1049字
预计阅读时间:5分钟
评分:86分
标签:Protocol Buffer,数据验证,开源工具,跨平台开发,跨语言开发
以下为原文内容
本内容来源于用户推荐转载,旨在分享知识与观点,如有侵权请联系删除 联系邮箱 media@ilingban.com
大家好,又见面了,我是 GitHub 精选君!
背景介绍
现代软件开发环境中,保证数据的完整性和一致性是一个重要的问题,尤其是跨网络甚至不同语言环境下的通信。谷歌的 Protocol Buffer 提供了一种跨平台、跨语言的通信协议,然而在默认情况下,它不会对数据进行任何形式的验证,这就要求开发人员在客户端和服务器端都进行相应的数据验证工作,这无疑增加了开发的复杂度。
今天要给大家推荐一个 GitHub 开源项目 bufbuild/protovalidate,该项目在 GitHub 有差不多 1000 Star,一句话介绍该项目:Protocol Buffer Validation – Go, Java, Python, and C++ Beta Releases!
项目介绍
protovalidate
是一款基于谷歌 Common Expression Language (CEL) 的 Protobuf 消息验证库。该项目旨在帮助开发者保护网络数据的一致性和完整性,而无需生成额外的代码。与其前身protoc-gen-validate
相比,protovalidate
在设计上有着更多的优点。它和protoc-gen-validate
的区别和优越性可以在以下博客中找到具体的说明。

由protovalidate
所构建的项目包括 API 定义、文档、迁移工具、示例文件以及一致性测试工具等。现在,有 Go、C++、Java 及 Python 的实现已经成为了 beta 版本。
如何使用
在你的 Protobuf 消息中定义约束,首先需要将buf/validate/validate.proto
导入你的.proto
文件。然后在buf
或protoc
中添加对protovalidate
的依赖。具体的代码示例如下:
syntax="proto3";
packagemy.package;
import"buf/validate/validate.proto";//导入protovalidate
关于如何实施验证约束,这里有几个例子。例子中的所有规则直接在proto
文件中定义:
例子1:对一个 User 消息,我们可以执行约束,要求用户的名字的最短长度。
syntax="proto3";
import"buf/validate/validate.proto";
messageUser{
//User'sname,mustbeatleast1characterlong.
stringname=1[(buf.validate.field).string.min_len=1];
}
对于更高级或自定义的约束,protovalidate
支持使用 CEL 表达式,以在字段间获取信息。
例子2:对于 Product 价格,我们可以要求显示价格的字符串中要包含货币符号,如 “$” 或 “£”,并确保价格为正。
syntax="proto3";
import"buf/validate/validate.proto";
messageProduct{
stringprice=1[(buf.validate.field).cel={
id:"product.price",
message:"Pricemustbepositiveandincludeavalidcurrencysymbol($or£)",
expression:"(this.startsWith('$')||this.startsWith('£'))&&double(this.substring(1))>0"
}];
}
项目推介
如果你正在使用 Protocol Buffer 并且想要确保数据的完整性和一致性,那么protovalidate
无疑是一个不二之选。它是bufbuild
组织中的一个项目,该组织一直为 Protocol Buffer 的使用提供了很多有用的工具。此外,protovalidate
支持多种语言,并且有持续更新的趋势,你不仅可以现在就使用,还可以期待它未来的发展。
以下是该项目 Star 趋势图(代表项目的活跃程度):
更多项目详情请查看如下链接。
开源项目地址:https://github.com/bufbuild/protovalidate
开源项目作者:bufbuild
关注我们,一起探索有意思的开源项目。
点击如下卡片后台回复:加群,与技术极客们一起交流人工智能、开源项目,一起成长。如果你正在寻求开源项目推广、DevOps、AIGC 大模型、软件开发等领域的付费服务,可参考推文了解详情。