validator — Validation des données en Rust

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

Qu'est-ce que validator ?

validator est une bibliothèque populaire pour la validation de données en Rust, offrant un moyen simple et expressif de vérifier la correction des données d'entrée. Elle est basée sur des macros et des annotations, ce qui permet de décrire les règles de validation directement dans les structures de données. La bibliothèque prend en charge des vérifications telles que la longueur d'une chaîne, la plage de nombres, les expressions régulières, les champs obligatoires et les validateurs personnalisés.

Pourquoi la validation est-elle nécessaire ?

Dans toute application qui traite des données externes (saisie utilisateur, requêtes API, fichiers de configuration), il est essentiel de vérifier la correction de ces données avant de les traiter. Les erreurs de validation peuvent entraîner un plantage du programme, des vulnérabilités de sécurité ou une logique incorrecte. validator permet de décrire les règles de manière centralisée, de générer automatiquement des messages d'erreur compréhensibles et d'éviter le code boilerplate.

Installation

Ajoutez dans Cargo.toml :

[dependencies]validator = { version = "0.16", features = ["derive"] }serde = { version = "1.0", features = ["derive"] }

Elle est également souvent utilisée avec serde pour la désérialisation des données.

Fonctionnalités principales

  • Attributs de validation : #[validate(length(min = 1, max = 100))], #[validate(range(min = 18, max = 99))], #[validate(email)], #[validate(regex = "...")] et autres.
  • Validateurs personnalisés : via l'attribut #[validate(custom = "my_function")].
  • Validation imbriquée : pour les structures contenant d'autres structures.
  • Regroupement des erreurs : retourne ValidationErrors avec des détails par champ.

Exemple de code en Rust

use validator::Validate;use serde::Deserialize;

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

#[validate(email)] email: String,

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

#[validate(required)] #[validate(length(min = 8))] password: Option<String>,}

fn main() { let user = User { name: "A".to_string(), // trop court email: "invalid".to_string(), age: 15, password: Some("123".to_string()), };

match user.validate() { Ok(_) => println!("Données valides"), Err(errors) => { for (field, err_list) in errors.field_errors() { println!("Le champ '{}' a des erreurs :", field); for err in err_list { println!(" - {}", err.message.as_ref().unwrap_or(&"erreur inconnue".to_string())); } } } }}

Quand utiliser validator ?

  • Lors de la création d'une API REST (par exemple, avec Actix-web, Axum, Rocket) pour valider les requêtes JSON entrantes.
  • Dans les applications CLI pour valider les arguments de la ligne de commande.
  • Lors du traitement de formulaires côté serveur.
  • Partout où une validation déclarative des données avec un minimum de code est requise.

La bibliothèque est idéale pour les projets où la sécurité et la lisibilité du code sont importantes. Elle est activement maintenue et largement utilisée dans l'écosystème Rust.

Recommendations