ما هو validator؟
validator هي مكتبة شائعة للتحقق من صحة البيانات في Rust، توفر طريقة بسيطة ومعبرة للتحقق من صحة البيانات المدخلة. تعتمد على الماكرو والتعليقات التوضيحية، مما يسمح بوصف قواعد التحقق مباشرة داخل هياكل البيانات. تدعم المكتبة عمليات التحقق مثل طول السلسلة النصية، نطاق الأرقام، التعبيرات المنتظمة، الحقول الإلزامية، والمحققين المخصصين.
لماذا نحتاج التحقق من الصحة؟
في أي تطبيق يتعامل مع بيانات خارجية (إدخال المستخدم، طلبات API، ملفات التهيئة)، من المهم جداً التحقق من صحة هذه البيانات قبل معالجتها. يمكن أن تؤدي أخطاء التحقق إلى تعطل البرنامج، ثغرات أمنية، أو منطق غير صحيح. يتيح لك validator وصف القواعد بشكل مركزي، وإنشاء رسائل خطأ مفهومة تلقائياً، وتجنب الكود المتكرر (boilerplate).
التثبيت
أضف إلى Cargo.toml:
[dependencies]validator = { version = "0.16", features = ["derive"] }serde = { version = "1.0", features = ["derive"] }غالباً ما يُستخدم مع serde لإلغاء تسلسل البيانات.
الوظائف الأساسية
- سمات التحقق:
#[validate(length(min = 1, max = 100))]،#[validate(range(min = 18, max = 99))]،#[validate(email)]،#[validate(regex = "...")]وغيرها. - محققون مخصصون: من خلال السمة
#[validate(custom = "my_function")]. - التحقق المتداخل: للهياكل التي تحتوي على هياكل أخرى.
- تجميع الأخطاء: يُرجع
ValidationErrorsمع تفاصيل حسب الحقول.
مثال كود بلغة 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(), // قصير جداً email: "invalid".to_string(), age: 15, password: Some("123".to_string()), };
match user.validate() { Ok(_) => println!("البيانات صحيحة"), Err(errors) => { for (field, err_list) in errors.field_errors() { println!("الحقل '{}' يحتوي على أخطاء:", field); for err in err_list { println!(" - {}", err.message.as_ref().unwrap_or(&"خطأ غير معروف".to_string())); } } } }}متى تستخدم validator؟
- عند إنشاء REST API (مثل Actix-web، Axum، Rocket) للتحقق من طلبات JSON الواردة.
- في تطبيقات CLI للتحقق من وسائط سطر الأوامر.
- عند معالجة النماذج على جانب الخادم.
- في أي مكان يتطلب التحقق التصريحي من البيانات بأقل قدر من الكود.
المكتبة مثالية للمشاريع التي تهمها الأمان وقابلية قراءة الكود. وهي مدعومة بنشاط وتستخدم على نطاق واسع في نظام Rust البيئي.