Rust के लिए HTTP-क्लाइंट: सर्वश्रेष्ठ लाइब्रेरीज़ का अवलोकन
\n\nRust एक सिस्टम प्रोग्रामिंग भाषा है जिसने सुरक्षा, प्रदर्शन और कचरा संग्रहकर्ता (garbage collector) की अनुपस्थिति के कारण लोकप्रियता हासिल की है। वेब एप्लिकेशन, माइक्रोसर्विसेज़ या API के साथ काम करने वाले टूल्स विकसित करते समय, HTTP अनुरोध भेजने की आवश्यकता अक्सर उत्पन्न होती है। इस लेख में, हम Rust में HTTP के साथ काम करने के लिए सर्वश्रेष्ठ लाइब्रेरीज़, उनकी विशेषताओं, प्रदर्शन और उपयोग के उदाहरणों पर चर्चा करेंगे।
\n\n1. reqwest — सबसे लोकप्रिय HTTP-क्लाइंट
\n\nreqwest Rust के लिए एक उच्च-स्तरीय, सुविधाजनक HTTP-क्लाइंट है, जो hyper पर आधारित है। यह सिंक्रोनस और एसिंक्रोनस दोनों अनुरोधों, JSON की स्वचालित प्रोसेसिंग, कुकीज़, प्रॉक्सी और TLS का समर्थन करता है।
मुख्य क्षमताएँ:
\n- \n
- async/await का समर्थन (tokio या async-std आवश्यक) \n
- JSON की स्वचालित सीरियलाइज़ेशन/डीसीरियलाइज़ेशन (serde के माध्यम से) \n
- फॉर्म, मल्टीपार्ट, फ़ाइलों के साथ काम करना \n
- कुकीज़ और सत्रों का प्रबंधन \n
- HTTP/2 और TLS का समर्थन (native-tls या rustls के माध्यम से) \n
reqwest के साथ GET अनुरोध का उदाहरण:
\nuse reqwest;\n\n#[tokio::main]\nasync fn main() -> Result<(), reqwest::Error> {\n let response = reqwest::get("https://api.github.com/repos/rust-lang/rust")\n .await?;\n\n let body = response.text().await?;\n println!("उत्तर: {}", body);\n Ok(())\n}\n\nJSON के साथ POST अनुरोध का उदाहरण:
\nuse reqwest;\nuse serde_json::json;\n\n#[tokio::main]\nasync fn main() -> Result<(), reqwest::Error> {\n let client = reqwest::Client::new();\n let payload = json!({"title": "नया कार्य", "completed": false});\n\n let response = client\n .post("https://jsonplaceholder.typicode.com/todos")\n .json(&payload)\n .send()\n .await?;\n\n println!("स्थिति: {}", response.status());\n Ok(())\n}\n\n2. ureq — न्यूनतम और तेज़
\n\nureq एक हल्का सिंक्रोनस HTTP-क्लाइंट है जो async runtime पर निर्भर नहीं है। यह स्क्रिप्ट्स, CLI-उपयोगिताओं और उन प्रोजेक्ट्स के लिए आदर्श है जहाँ एसिंक्रोनसिटी की आवश्यकता नहीं है।
\n\nविशेषताएँ:
\n- \n
- स्वच्छ सिंक्रोनस API \n
- न्यूनतम निर्भरताएँ \n
- JSON, मल्टीपार्ट, कुकीज़ का समर्थन \n
- अंतर्निहित TLS समर्थन (native-tls या rustls के माध्यम से) \n
ureq के साथ उदाहरण:
\nuse ureq;\n\nfn main() -> Result<(), ureq::Error> {\n let response = ureq::get("https://httpbin.org/get")\n .set("Accept", "application/json")\n .call()?;\n\n let body: serde_json::Value = response.into_json()?;\n println!("JSON: {}", body);\n Ok(())\n}\n\n3. hyper — निम्न-स्तरीय आधार
\n\nhyper एक एसिंक्रोनस HTTP-लाइब्रेरी है, जिस पर कई अन्य क्लाइंट (reqwest सहित) बने हैं। यह अनुरोधों पर पूर्ण नियंत्रण देता है, लेकिन इसके लिए अधिक कोड और एसिंक्रोनस अवधारणाओं की समझ की आवश्यकता होती है।
\n\nhyper कब चुनें:
\n- \n
- अधिकतम प्रदर्शन की आवश्यकता हो \n
- कनेक्शनों की सूक्ष्म ट्यूनिंग आवश्यक हो \n
- आप अपना स्वयं का HTTP-सर्वर या प्रॉक्सी बना रहे हों \n
hyper के साथ सरल GET अनुरोध का उदाहरण:
\nuse hyper::{Client, Uri};\nuse hyper::body::HttpBody;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n let client = Client::new();\n let uri: Uri = "http://httpbin.org/ip".parse()?;\n let mut response = client.get(uri).await?;\n\n while let Some(chunk) = response.body_mut().data().await {\n let data = chunk?;\n println!("{}", String::from_utf8_lossy(&data));\n }\n Ok(())\n}\n\n4. actix-web-client — Actix पारिस्थितिकी तंत्र के लिए
\n\nactix-web-client एक