Was ist validator?
validator ist eine beliebte Bibliothek zur Datenvalidierung in Rust, die eine einfache und ausdrucksstarke Möglichkeit bietet, die Korrektheit von Eingabedaten zu überprüfen. Sie basiert auf Makros und Annotationen, sodass Validierungsregeln direkt in Datenstrukturen beschrieben werden können. Die Bibliothek unterstützt Prüfungen wie Zeichenkettenlänge, Zahlenbereiche, reguläre Ausdrücke, Pflichtfelder und benutzerdefinierte Validatoren.
Wozu dient Validierung?
In jeder Anwendung, die mit externen Daten arbeitet (Benutzereingaben, API-Anfragen, Konfigurationsdateien), ist es entscheidend, die Korrektheit dieser Daten vor ihrer Verarbeitung zu überprüfen. Validierungsfehler können zu Programmabstürzen, Sicherheitslücken oder fehlerhafter Logik führen. validator ermöglicht es, Regeln zentral zu beschreiben, verständliche Fehlermeldungen automatisch zu generieren und Boilerplate-Code zu vermeiden.
Installation
Fügen Sie in Cargo.toml hinzu:
[dependencies]validator = { version = "0.16", features = ["derive"] }serde = { version = "1.0", features = ["derive"] }Wird oft zusammen mit serde zur Deserialisierung von Daten verwendet.
Hauptfunktionen
- Validierungsattribute:
#[validate(length(min = 1, max = 100))],#[validate(range(min = 18, max = 99))],#[validate(email)],#[validate(regex = "...")]und andere. - Benutzerdefinierte Validatoren: über das Attribut
#[validate(custom = "my_function")]. - Verschachtelte Validierung: für Strukturen, die andere Strukturen enthalten.
- Fehlergruppierung: gibt
ValidationErrorsmit detaillierten Informationen pro Feld zurück.
Rust-Codebeispiel
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(), // zu kurz email: "invalid".to_string(), age: 15, password: Some("123".to_string()), };
match user.validate() { Ok(_) => println!("Daten sind korrekt"), Err(errors) => { for (field, err_list) in errors.field_errors() { println!("Feld '{}' hat Fehler:", field); for err in err_list { println!(" - {}", err.message.as_ref().unwrap_or(&"unbekannter Fehler".to_string())); } } } }}Wann sollte man validator verwenden?
- Bei der Erstellung von REST-APIs (z. B. mit Actix-web, Axum, Rocket) zur Überprüfung eingehender JSON-Anfragen.
- In CLI-Anwendungen zur Validierung von Befehlszeilenargumenten.
- Bei der serverseitigen Verarbeitung von Formularen.
- Überall dort, wo eine deklarative Datenprüfung mit minimalem Code erforderlich ist.
Die Bibliothek ist ideal für Projekte, bei denen Sicherheit und Lesbarkeit des Codes wichtig sind. Sie wird aktiv gewartet und ist im Rust-Ökosystem weit verbreitet.
```Auch in der Bibliothek
ORM für Java: Vergleich von Hibernate, MyBatis und JPA mit Beispielen
PDF-Generierung in Kotlin: Bibliotheken und Werkzeuge (iText, Apache PDFBox)
Mocha JavaScript (Node.js): Komplettleitfaden mit Beispielen
Konfiguration von Java-Anwendungen: Bibliotheken und Tools zur Verwaltung von Einstellungen
Logging für Swift (iOS/macOS): Die besten Lösungen