التحقق من صحة البيانات في Rust: نظرة عامة على المكتبات والأطر

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التحقق من صحة البيانات في Rust: نظرة عامة على المكتبات والأطر

التحقق من صحة البيانات هو مرحلة حاسمة في تطوير أي تطبيق بلغة Rust. تعتمد أمان واستقرار وقابلية توقع عمل البرنامج على صحة فحص البيانات المدخلة. يوجد في نظام Rust البيئي العديد من الحلول الناضجة للتحقق من الصحة، ولكل منها خصائصه. في هذه المقالة، سنستعرض بالتفصيل ثلاث مكتبات رئيسية: validator وgarde وvalidify، بالإضافة إلى الإمكانيات المضمنة لـ serde.



1. مكتبة validator

validator هي المكتبة الأكثر شيوعًا للتحقق من صحة هياكل البيانات. توفر سمات لتعليق حقول الهياكل وإنشاء كود الفحص تلقائيًا عبر وحدات الماكرو المشتقة (derive macros).



التثبيت

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


مثال على الاستخدام

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!("البيانات صحيحة"), Err(errors) => { for (field, err) in &errors { println!("خطأ في الحقل '{}': {:?}", field, err); } } }}


الإمكانيات الرئيسية لـ validator

  • مدققات مدمجة: email، url، phone، credit_card، ip، must_match وغيرها.
  • فحص أطوال السلاسل النصية، النطاقات الرقمية، التعبيرات المنتظمة.
  • التحقق من صحة الهياكل المتداخلة عبر #[validate(nested)].
  • دعم المدققات المخصصة عبر custom.


2. مكتبة garde

garde هو إطار عمل حديث وعالي الأداء للتحقق من الصحة، ويُقدم كبديل لـ validator مع أداء محسن ونظام قواعد أكثر مرونة.



التثبيت

[dependencies]garde = "0.21"


مثال على الاستخدام

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: "пароль".to_string(), };

if let Err(errors) = form.validate() { for error in errors { println!("خطأ: {}", error.message); } } else { println!("النموذج صالح"); }}


مزايا garde

  • أداء عالٍ بفضل تقليل عمليات تخصيص الذاكرة.
  • دعم المدققات غير المتزامنة (asynchronous validators).
  • مجموعة غنية من القواعد المدمجة: email، url، ip، phone، credit_card، pattern وغيرها.
  • تجميع القواعد والتحقق السياقي.
  • إمكانية إنشاء مدققات مخصصة بمنطق عشوائي.


3. مكتبة validify

validify هو إطار عمل يتكامل مع serde ويوفر طريقة ملائمة للتحقق من صحة البيانات فور إلغاء التسلسل (deserialization). هذا مفيد بشكل خاص عند العمل مع أطر الويب (actix-web، axum).



التثبيت

توصيات