Validation des données en Rust : aperçu des bibliothèques et frameworks
La validation des données est une étape critique dans le développement de toute application en Rust. La sécurité, la stabilité et la prévisibilité du programme dépendent de l'exactitude de la vérification des données d'entrée. Dans l'écosystème Rust, il existe plusieurs solutions matures pour la validation, chacune ayant ses propres caractéristiques. Dans cet article, nous examinerons en détail trois bibliothèques principales : validator, garde et validify, ainsi que les capacités intégrées de serde.
1. Bibliothèque validator
validator est la bibliothèque la plus populaire pour la validation des structures de données. Elle fournit des attributs pour annoter les champs des structures et générer automatiquement du code de vérification via des macros derive.
Installation
[dependencies]validator = { version = "0.18", features = ["derive"] }Exemple d'utilisation
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!("Données valides"), Err(errors) => { for (field, err) in &errors { println!("Erreur dans le champ '{}' : {:?}", field, err); } } }}Principales fonctionnalités de validator
- Validateurs intégrés :
email,url,phone,credit_card,ip,must_matchet autres. - Vérification des longueurs de chaînes, des plages numériques, des expressions régulières.
- Validation des structures imbriquées via
#[validate(nested)]. - Prise en charge de validateurs personnalisés via
custom.
2. Bibliothèque garde
garde est un framework de validation moderne et performant, présenté comme une alternative à validator avec des performances améliorées et un système de règles plus flexible.
Installation
[dependencies]garde = "0.21"Exemple d'utilisation
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!("Erreur : {}", error.message); } } else { println!("Formulaire valide"); }}Avantages de garde
- Haute performance grâce à la minimisation des allocations.
- Prise en charge des validateurs asynchrones.
- Ensemble riche de règles intégrées :
email,url,ip,phone,credit_card,patternet autres. - Regroupement de règles et validation contextuelle.
- Possibilité de créer des validateurs personnalisés avec une logique arbitraire.
3. Bibliothèque validify
validify est un framework qui s'intègre avec serde et offre un moyen pratique de valider les données immédiatement après la désérialisation. Cela est particulièrement utile lors du travail avec des frameworks web (actix-web, axum).
Installation
Aussi dans la bibliothèque
gRPC pour Rust : bibliothèques et exemples d'utilisation
Validation des données en Rust : bibliothèques et approches pour un code fiable
CsvHelper C# (.NET) : guide complet avec exemples
Mise en cache en Swift (iOS/macOS) : Redis, NSCache et Core Data
Guide complet Symfony/EventDispatcher PHP : tutoriel et exemples