Validación de datos en Rust: revisión de bibliotecas y frameworks

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

Validación de datos en Rust: revisión de bibliotecas y frameworks

La validación de datos es una etapa críticamente importante en el desarrollo de cualquier aplicación en Rust. La seguridad, estabilidad y previsibilidad del funcionamiento del programa dependen de la correcta verificación de los datos de entrada. En el ecosistema de Rust existen varias soluciones maduras para la validación, cada una con sus propias características. En este artículo, analizaremos en detalle tres bibliotecas principales: validator, garde y validify, y también abordaremos las capacidades integradas de serde.



1. Biblioteca validator

validator es la biblioteca más popular para la validación de estructuras de datos. Proporciona atributos para anotar campos de estructuras y la generación automática de código de verificación a través de macros derive.



Instalación

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


Ejemplo de uso

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!("Datos correctos"), Err(errors) => { for (field, err) in &errors { println!("Error en el campo '{}': {:?}", field, err); } } }}


Principales capacidades de validator

  • Validadores integrados: email, url, phone, credit_card, ip, must_match y otros.
  • Verificación de longitudes de cadenas, rangos numéricos, expresiones regulares.
  • Validación de estructuras anidadas mediante #[validate(nested)].
  • Soporte para validadores personalizados a través de custom.


2. Biblioteca garde

garde es un framework de validación moderno y de alto rendimiento que se posiciona como una alternativa a validator con un rendimiento mejorado y un sistema de reglas más flexible.



Instalación

[dependencies]garde = "0.21"


Ejemplo de uso

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: "contraseña".to_string(), };

if let Err(errors) = form.validate() { for error in errors { println!("Error: {}", error.message); } } else { println!("Formulario válido"); }}


Ventajas de garde

  • Alto rendimiento gracias a la minimización de asignaciones.
  • Soporte para validadores asíncronos.
  • Amplio conjunto de reglas integradas: email, url, ip, phone, credit_card, pattern y otras.
  • Agrupación de reglas y validación contextual.
  • Posibilidad de crear validadores personalizados con lógica arbitraria.


3. Biblioteca validify

validify es un framework que se integra con serde y proporciona una forma conveniente de validar datos inmediatamente después de la deserialización. Esto es especialmente útil al trabajar con frameworks web (actix-web, axum).



Instalación

Recommendations