Validation des données en Rust : bibliothèques et approches

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Validation des données en Rust : aperçu des bibliothèques et des approches pratiques



Dans le développement moderne en Rust, en particulier lors de la création de services web et d'API, la validation des données entrantes est une tâche cruciale. Le langage Rust offre déjà un système de types puissant qui élimine des classes entières d'erreurs dès la compilation. Cependant, pour vérifier la logique métier (par exemple, la longueur minimale d'un mot de passe, la validité d'un email, une plage de nombres), des outils supplémentaires sont nécessaires. Dans cet article, nous examinerons les trois bibliothèques de validation de données les plus populaires en Rust : validator, garde et valitron.



1. Bibliothèque validator



validator est sans doute la bibliothèque de validation de structures la plus connue et la plus mature en Rust. Elle est basée sur des attributs (derive macros) et prend en charge de nombreuses règles intégrées.



Installation :

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


Exemple d'utilisation :

use validator::Validate;

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

#[validate(email)] email: String,

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

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

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

match user.validate() { Ok(_) => println!("Validation réussie !"), Err(errors) => { for (field, err) in &errors.errors() { println!("Erreur dans le champ '{}' : {:?}", field, err); } } }}


Avantages :

  • Grand nombre de validateurs intégrés : email, URL, longueur, plage, expressions régulières.
  • Prise en charge de fonctions de validation personnalisées via l'attribut custom.
  • Bonne intégration avec les frameworks web (Actix-web, Axum, Rocket).


Inconvénients :

  • Dépend des macros, ce qui peut ralentir la compilation.
  • Les erreurs sont renvoyées sous forme de HashMap, ce qui nécessite un traitement supplémentaire pour l'API.


2. Bibliothèque garde



garde est une alternative plus moderne et plus rapide à validator. Elle utilise également des derive macros, mais offre une API plus flexible et de meilleures performances.



Installation :

[dependencies]garde = "0.20"


Exemple d'utilisation :

use garde::Validate;

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

#[garde(ascii, length(min = 8))] password: String,

#[garde(skip)] remember_me: bool,}

fn main() { let req = LoginRequest { username: "ab".to_string(), password: "1234567".to_string(), remember_me: true, };

if let Err(errors) = req.validate() { for error in &errors { println!("Erreur : {} - {}", error.path(), error.message()); } } else { println!("Validation réussie !"); }}


Avantages :

  • Haute performance grâce à un code optimisé.
  • Messages d'erreur clairs avec le chemin vers le champ.
  • Prise en charge des structures imbriquées et des collections.
  • Possibilité de créer ses propres règles sans macros.


Inconvénients :

  • Moins de validateurs intégrés (pas d'email, URL par défaut).
  • Communauté plus petite que celle de validator.


3. Bibliothèque valitron



valitron est une bibliothèque légère qui n'utilise pas

Recommendations