Datenvalidierung in Rust: Überblick über Bibliotheken und Frameworks

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Datenvalidierung in Rust: Überblick über Bibliotheken und Frameworks

Datenvalidierung ist ein kritischer Schritt in der Entwicklung jeder Anwendung in Rust. Die Sicherheit, Stabilität und Vorhersagbarkeit des Programms hängen von der Korrektheit der Prüfung der Eingabedaten ab. Im Rust-Ökosystem gibt es mehrere ausgereifte Lösungen zur Validierung, jede mit ihren eigenen Besonderheiten. In diesem Artikel betrachten wir drei Hauptbibliotheken im Detail: validator, garde und validify, und gehen auch auf die integrierten Möglichkeiten von serde ein.



1. Die Bibliothek validator

validator ist die beliebteste Bibliothek zur Validierung von Datenstrukturen. Sie bietet Attribute zur Annotation von Strukturfeldern und zur automatischen Generierung von Prüfcode über derive-Makros.



Installation

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


Anwendungsbeispiel

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!("Daten sind korrekt"), Err(errors) => { for (field, err) in &errors { println!("Fehler im Feld '{}': {:?}", field, err); } } }}


Hauptfunktionen von validator

  • Integrierte Validatoren: email, url, phone, credit_card, ip, must_match und andere.
  • Prüfung von Zeichenkettenlängen, Zahlenbereichen, regulären Ausdrücken.
  • Validierung verschachtelter Strukturen über #[validate(nested)].
  • Unterstützung benutzerdefinierter Validatoren über custom.


2. Die Bibliothek garde

garde ist ein modernes und leistungsstarkes Validierungs-Framework, das sich als Alternative zu validator mit verbesserter Leistung und einem flexibleren Regelsystem positioniert.



Installation

[dependencies]garde = "0.21"


Anwendungsbeispiel

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!("Fehler: {}", error.message); } } else { println!("Formular ist gültig"); }}


Vorteile von garde

  • Hohe Leistung durch Minimierung von Allokationen.
  • Unterstützung asynchroner Validatoren.
  • Umfangreicher Satz integrierter Regeln: email, url, ip, phone, credit_card, pattern und andere.
  • Gruppierung von Regeln und kontextbezogene Validierung.
  • Möglichkeit zur Erstellung benutzerdefinierter Validatoren mit beliebiger Logik.


3. Die Bibliothek validify

validify ist ein Framework, das sich in serde integriert und eine bequeme Möglichkeit zur Datenvalidierung direkt nach der Deserialisierung bietet. Dies ist besonders nützlich bei der Arbeit mit Web-Frameworks (actix-web, axum).



Installation

Empfehlungen