Posted in

【回顾】开箱即用的 Protocol Buffer 数据验证工具_AI阅读总结 — 包阅AI

包阅导读总结

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文件。然后在bufprotoc中添加对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 大模型、软件开发等领域的付费服务,可参考推文了解详情。