validator — Validación de datos en Rust

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿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 ValidationErrors con 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.

Recommendations