Rust中的数据验证:库与框架概览

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Rust中的数据验证:库与框架概览

数据验证是任何Rust应用程序开发中至关重要的阶段。输入数据验证的正确性决定了程序的安全性、稳定性和可预测性。在Rust生态系统中,存在多个成熟的验证解决方案,每个都有其自身特点。在本文中,我们将详细讨论三个主要库:validator、garde和validify,并涉及serde的内置功能。



1. validator库

validator 是最流行的数据结构验证库。它提供属性来注解结构体字段,并通过derive宏自动生成检查代码。



安装

[dependencies]validator = { version = "0.18", features = ["derive"] }


使用示例

use validator::Validate;

#[derive(Debug, Validate)]struct User { #[validate(length(min = 3, max = 50))] username: String,

#[validate(email)] email: String,

#[validate(range(min = 18, max = 120))] age: u8,

#[validate(required)] phone: Option<String>,}

fn main() { let user = User { username: "Jo".to_string(), email: "invalid-email".to_string(), age: 15, phone: None, };

match user.validate() { Ok(_) => println!("数据有效"), Err(errors) => { for (field, err) in &errors { println!("字段 '{}' 中的错误: {:?}", field, err); } } }}


validator的主要功能

  • 内置验证器:email、url、phone、credit_card、ip、must_match等。
  • 字符串长度、数值范围、正则表达式检查。
  • 通过 #[validate(nested)] 验证嵌套结构。
  • 通过 custom 支持自定义验证器。


2. garde库

garde 是一个现代且高性能的验证框架,定位为 validator 的替代品,具有更高的性能和更灵活的规则系统。



安装

[dependencies]garde = "0.21"


使用示例

use garde::Validate;

#[derive(Debug, Validate)]struct RegisterForm { #[garde(length(min = 3, max = 50))] username: String,

#[garde(email)] email: String,

#[garde(range(min = 18))] age: u32,

#[garde(ascii)] password: String,}

fn main() { let form = RegisterForm { username: "a".to_string(), email: "test".to_string(), age: 15, password: "пароль".to_string(), };

if let Err(errors) = form.validate() { for error in errors { println!("错误: {}", error.message); } } else { println!("表单有效"); }}


garde的优势

  • 通过最小化内存分配实现高性能。
  • 支持异步验证器。
  • 丰富的内置规则集:email、url、ip、phone、credit_card、pattern等。
  • 规则分组和上下文验证。
  • 能够创建具有任意逻辑的自定义验证器。


3. validify库

validify 是一个与 serde 集成的框架,提供了一种在反序列化后立即验证数据的便捷方式。这在处理Web框架(actix-web、axum)时特别有用。



安装

推荐