परिचय: HTTP रिक्वेस्ट के लिए Rust क्यों बेहतरीन है?
\nRust एक सिस्टम प्रोग्रामिंग भाषा है जो अपनी सुरक्षा, परफॉरमेंस और गार्बेज कलेक्टर की कमी के कारण लोकप्रिय हुई है। यदि आप कोई नेटवर्क एप्लिकेशन, वेब स्क्रैपर या माइक्रोसर्विस बना रहे हैं, तो Rust में HTTP रिक्वेस्ट करना सीखना एक ज़रूरी स्किल है। इस आर्टिकल में हम reqwest लाइब्रेरी का उपयोग करके Rust में एक पूर्ण HTTP क्लाइंट बनाना सीखेंगे, जो Rust इकोसिस्टम में HTTP के लिए डी-फैक्टो स्टैंडर्ड है।
हम डिपेंडेंसी इंस्टॉल करने से लेकर एरर हैंडलिंग और JSON के साथ काम करने तक का सफर तय करेंगे। इस लेख के अंत तक, आप Rust में भरोसेमंद और तेज़ HTTP क्लाइंट लिख पाएंगे जो प्रोडक्शन में भी काम आएंगे।
\n\nप्रोजेक्ट सेटअप और इंस्टॉलेशन
\nपहला कदम है एक नया प्रोजेक्ट बनाना और reqwest डिपेंडेंसी को async और JSON सपोर्ट के साथ जोड़ना।
cargo new rust_http_client\ncd rust_http_client\nCargo.toml खोलें और यह जोड़ें:
[dependencies]\nreqwest = { version = "0.12", features = ["json"] }\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\nहर डिपेंडेंसी का काम:
\n- \n
- reqwest — मुख्य HTTP क्लाइंट।
jsonफ्लैग सीरियलाइज़ेशन/डीसीरियलाइज़ेशन को सपोर्ट करता है। \n - tokio — Rust का async रनटाइम।
reqwestमें HTTP रिक्वेस्ट डिफ़ॉल्ट रूप से async होते हैं। \n - serde / serde_json — JSON के साथ काम करने के लिए (स्ट्रक्चर, सीरियलाइज़ेशन)। \n
अब कोड लिखने के लिए सब कुछ तैयार है।
\n\nबेसिक GET रिक्वेस्ट: सर्वर से डेटा प्राप्त करें
\nचलिए एक सरल GET रिक्वेस्ट से शुरू करते हैं। एक फंक्शन बनाएं जो पब्लिक API से डेटा लेकर कंसोल पर दिखाए।
\nuse reqwest::Error;\n\n#[tokio::main]\nasync fn main() -> Result<(), Error> {\n let url = "https://jsonplaceholder.typicode.com/posts/1";\n let response = reqwest::get(url).await?;\n\n println!("स्टेटस: {}", response.status());\n\n let body = response.text().await?;\n println!("रिस्पॉन्स बॉडी:\\n{}", body);\n\n Ok(())\n}\nयहाँ क्या हो रहा है:
\n- \n
- हम async फंक्शन चलाने के लिए
#[tokio::main]मैक्रो का उपयोग कर रहे हैं। \n reqwest::get(url).await?GET रिक्वेस्ट करता है।?साइन एरर को आगे भेजता है अगर रिक्वेस्ट फेल हो जाए। \nresponse.status()HTTP स्टेटस लौटाता है (जैसे 200 OK)। \nresponse.text().await?रिस्पॉन्स बॉडी को स्ट्रिंग के रूप में निकालता है। \n
कोड को cargo run कमांड से चलाएं। आपको पोस्ट डेटा के साथ एक JSON ऑब्जेक्ट दिखाई देगा।
हेडर और रिक्वेस्ट पैरामीटर जोड़ना
\nअसली एप्लिकेशन में अक्सर हेडर (जैसे API-की) या query-पैरामीटर भेजने की ज़रूरत होती है। यहाँ बताया गया है कैसे:
\nuse reqwest::Client;\nuse std::collections::HashMap;\n\n#[tokio::main]\nasync fn main() -> Result<(), reqwest::Error> {\n let client = Client::new();\n\n let mut params = HashMap::new();\n params.insert("userId", "1");\n\n let response = client\n .get("https://jsonplaceholder.typicode.com/posts")\n .header("Accept", "application/json")\n .query(¶ms)\n .send()\n .await?;\n\n let posts: serde_json::Value = response.json().await?;\n println!("पोस्ट की संख्या: {}", posts.as_array().unwrap().len());\n\n Ok(())\n}\nमुख्य बिंदु:
\n- \n
- हम
Clientबनाते हैं — यह एक रीयूज़ेबल HTTP क्लाइंट है जिसमें कनेक्शन पूल होता है। प्रोडक्शन कोड में हमेशाreqwest::getके बजाय Client का उपयोग करें। \n .header()मेथड हेडर जोड़ता है। \n.query()पैरामीटर का डिक्शनरी लेता है और URL को ऑटोमैटिकली एनकोड करता है।