¿Qué es validator?
validator es una biblioteca popular para la validación de datos en Rust, que proporciona una forma simple y expresiva de verificar la corrección de los datos de entrada. Está basada en macros y anotaciones, lo que permite describir reglas de validación directamente en las estructuras de datos. La biblioteca admite verificaciones como longitud de cadena, rango numérico, expresiones regulares, campos obligatorios y validadores personalizados.
¿Para qué sirve la validación?
En cualquier aplicación que trabaje con datos externos (entrada de usuario, solicitudes API, archivos de configuración), es críticamente importante verificar la corrección de estos datos antes de procesarlos. Los errores de validación pueden provocar caídas del programa, vulnerabilidades de seguridad o lógica incorrecta. validator permite describir reglas de forma centralizada, generar automáticamente mensajes de error comprensibles y evitar código repetitivo (boilerplate).
Instalación
Agregue a Cargo.toml:
[dependencies]validator = { version = "0.16", features = ["derive"] }serde = { version = "1.0", features = ["derive"] }A menudo también se usa junto con serde para la deserialización de datos.
Funciones principales
- Atributos de validación:
#[validate(length(min = 1, max = 100))],#[validate(range(min = 18, max = 99))],#[validate(email)],#[validate(regex = "...")]y otros. - Validadores personalizados: a través del atributo
#[validate(custom = "my_function")]. - Validación anidada: para estructuras que contienen otras estructuras.
- Agrupación de errores: devuelve
ValidationErrorscon detalles por campo.
Ejemplo de código 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(), // demasiado corto email: "invalid".to_string(), age: 15, password: Some("123".to_string()), };
match user.validate() { Ok(_) => println!("Datos correctos"), Err(errors) => { for (field, err_list) in errors.field_errors() { println!("El campo '{}' tiene errores:", field); for err in err_list { println!(" - {}", err.message.as_ref().unwrap_or(&"error desconocido".to_string())); } } } }}¿Cuándo usar validator?
- Al crear una API REST (por ejemplo, con Actix-web, Axum, Rocket) para verificar solicitudes JSON entrantes.
- En aplicaciones CLI para validar argumentos de línea de comandos.
- Al procesar formularios del lado del servidor.
- En cualquier lugar donde se requiera una verificación declarativa de datos con código mínimo.
La biblioteca es ideal para proyectos donde la seguridad y la legibilidad del código son importantes. Es mantenida activamente y ampliamente utilizada en el ecosistema de Rust.
También en la biblioteca
Validación de datos en PHP con la librería Respect\\Validation
Cliente Redis para PHP: Predis y PhpRedis – conexión y ejemplos
Envío de SMS en Go (Golang): Biblioteca API
Trabajo con Excel en PHP: bibliotecas PhpSpreadsheet, PhpOffice y generación de XLSX