Rust में डेटा सत्यापन: लाइब्रेरीज़ और व्यावहारिक दृष्टिकोणों का अवलोकन
\n\nRust में आधुनिक विकास में, विशेष रूप से वेब सेवाएँ और API बनाते समय, इनकमिंग डेटा का सत्यापन एक महत्वपूर्ण कार्य है। Rust भाषा पहले से ही एक शक्तिशाली टाइप सिस्टम प्रदान करती है, जो कंपाइलेशन चरण में त्रुटियों के पूरे वर्गों को काट देती है। हालाँकि, व्यावसायिक तर्क की जाँच के लिए (उदाहरण के लिए, पासवर्ड की न्यूनतम लंबाई, ईमेल की सत्यता, संख्याओं की सीमा) अतिरिक्त उपकरणों की आवश्यकता होती है। इस लेख में, हम Rust में डेटा सत्यापन के लिए तीन सबसे लोकप्रिय लाइब्रेरीज़ पर विचार करेंगे: validator, garde और valitron।
1. लाइब्रेरी validator
\n\nvalidator शायद Rust में संरचनाओं के सत्यापन के लिए सबसे प्रसिद्ध और परिपक्व लाइब्रेरी है। यह एट्रीब्यूट (derive macros) पर बनाया गया है और कई अंतर्निहित नियमों का समर्थन करता है।
स्थापना:
\n[dependencies]\nvalidator = { version = "0.18", features = ["derive"] }\n\nउपयोग का उदाहरण:
\nuse validator::Validate;\n\n#[derive(Debug, Validate)]\nstruct User {\n #[validate(length(min = 3, max = 20))]\n username: String,\n\n #[validate(email)]\n email: String,\n\n #[validate(range(min = 18, max = 120))]\n age: u32,\n\n #[validate(required)]\n password: Option<String>,\n}\n\nfn main() {\n let user = User {\n username: "Jo".to_string(),\n email: "invalid-email".to_string(),\n age: 15,\n password: None,\n };\n\n match user.validate() {\n Ok(_) => println!("सत्यापन सफल!"),\n Err(errors) => {\n for (field, err) in &errors.errors() {\n println!("फ़ील्ड '{}' में त्रुटि: {:?}", field, err);\n }\n }\n }\n}\n\nलाभ:
\n- \n
- बड़ी संख्या में अंतर्निहित सत्यापनकर्ता: ईमेल, URL, लंबाई, सीमा, नियमित अभिव्यक्तियाँ। \n
customएट्रीब्यूट के माध्यम से कस्टम सत्यापन फ़ंक्शन का समर्थन। \n- वेब फ्रेमवर्क (Actix-web, Axum, Rocket) के साथ अच्छा एकीकरण। \n
कमियाँ:
\n- \n
- मैक्रोज़ पर निर्भर करता है, जो कंपाइलेशन को धीमा कर सकता है। \n
- त्रुटियाँ
HashMapके रूप में लौटाई जाती हैं, जिसके लिए API के लिए अतिरिक्त प्रसंस्करण की आवश्यकता होती है। \n
2. लाइब्रेरी garde
\n\ngarde validator का एक अधिक आधुनिक और तेज़ विकल्प है। यह भी derive-मैक्रोज़ का उपयोग करता है, लेकिन अधिक लचीला API और बेहतर प्रदर्शन प्रदान करता है।
स्थापना:
\n[dependencies]\ngarde = "0.20"\n\nउपयोग का उदाहरण:
\nuse garde::Validate;\n\n#[derive(Debug, Validate)]\nstruct LoginRequest {\n #[garde(length(min = 3, max = 50))]\n username: String,\n\n #[garde(ascii, length(min = 8))]\n password: String,\n\n #[garde(skip)]\n remember_me: bool,\n}\n\nfn main() {\n let req = LoginRequest {\n username: "ab".to_string(),\n password: "1234567".to_string(),\n remember_me: true,\n };\n\n if let Err(errors) = req.validate() {\n for error in &errors {\n println!("त्रुटि: {} - {}", error.path(), error.message());\n }\n } else {\n println!("सत्यापन सफल!");\n }\n}\n\nलाभ:
\n- \n
- अनुकूलित कोड के कारण उच्च प्रदर्शन। \n
- फ़ील्ड के पथ के साथ स्पष्ट त्रुटि संदेश। \n
- नेस्टेड संरचनाओं और संग्रहों का समर्थन। \n
- मैक्रोज़ के बिना अपने स्वयं के नियम बनाने की क्षमता। \n
कमियाँ:
\n- \n
- कम अंतर्निहित सत्यापनकर्ता (डिफ़ॉल्ट रूप से कोई ईमेल, URL नहीं)। \n
validatorकी तुलना में छोटा समुदाय। \n
3. लाइब्रेरी valitron
\n\nvalitron एक हल्की लाइब्रेरी है जो उपयोग नहीं करती