Rust के लिए HTTP-क्लाइंट: सर्वश्रेष्ठ लाइब्रेरियों का अवलोकन
Rust एक सिस्टम प्रोग्रामिंग भाषा है, जिसका उपयोग वेब सेवाओं, माइक्रोसर्विसेज और नेटवर्किंग टूल्स के निर्माण के लिए तेजी से किया जा रहा है। सही HTTP-क्लाइंट का चयन प्रदर्शन, सुरक्षा और विकास में आसानी के लिए महत्वपूर्ण है। इस लेख में, हम Rust इकोसिस्टम में HTTP अनुरोध करने के लिए तीन सबसे लोकप्रिय लाइब्रेरियों पर चर्चा करेंगे: reqwest, ureq और hyper। इनमें से प्रत्येक की अपनी ताकत है और ये विभिन्न परिदृश्यों के लिए उपयुक्त हैं।
1. Reqwest — बहुमुखी विकल्प
Reqwest Rust में HTTP अनुरोधों के लिए शायद सबसे लोकप्रिय लाइब्रेरी है। यह hyper पर आधारित है और एक उच्च-स्तरीय, एर्गोनोमिक API प्रदान करता है। यह एसिंक्रोनस (tokio के माध्यम से) और सिंक्रोनस दोनों अनुरोधों (उपयुक्त फ्लैग को शामिल करके) का समर्थन करता है।
मुख्य विशेषताएँ:
- एसिंक्रोनस और सिंक्रोनस मोड।
- रीडायरेक्शन की स्वचालित हैंडलिंग।
- JSON के साथ काम करना (
serdeके माध्यम से सीरियलाइज़ेशन/डीसीरियलाइज़ेशन)। - कुकीज़, प्रॉक्सी, TLS के लिए समर्थन।
- फॉर्म और मल्टीपार्ट डेटा के साथ सुविधाजनक कार्य।
एसिंक्रोनस GET अनुरोध का उदाहरण:
use reqwest;use serde::Deserialize;
#[derive(Deserialize, Debug)]struct ApiResponse { userId: u32, id: u32, title: String, completed: bool,}
#[tokio::main]async fn main() -> Result<(), reqwest::Error> { let url = "https://jsonplaceholder.typicode.com/todos/1"; let response: ApiResponse = reqwest::get(url) .await? .json() .await?;
println!("{:#?}", response); Ok(())}यह उदाहरण दिखाता है कि GET अनुरोध करना और JSON प्रतिक्रिया को एक संरचना में डीसीरियलाइज़ करना कितना आसान है। Reqwest सरल स्क्रिप्ट से लेकर बड़े वेब एप्लिकेशन तक, अधिकांश प्रोजेक्ट्स के लिए आदर्श है।
2. Ureq — न्यूनतमता और सरलता
Ureq एक हल्का, सिंक्रोनस HTTP-क्लाइंट है। इसका मुख्य लाभ न्यूनतम निर्भरताएँ और एसिंक्रोनस रनटाइम की आवश्यकता का अभाव है। आप बस क्रेट जोड़ते हैं और इसका उपयोग करते हैं। यह CLI-उपयोगिताओं, स्क्रिप्ट्स और उन स्थितियों के लिए उपयुक्त है जहाँ एसिंक्रोनसिटी की आवश्यकता नहीं है।
मुख्य विशेषताएँ:
- पूरी तरह से सिंक्रोनस (ब्लॉकिंग) API।
- न्यूनतम निर्भरताएँ (
tokioकी आवश्यकता नहीं)। - JSON और कुकी के लिए अंतर्निहित समर्थन।
- हेडर और पैरामीटर के साथ सरल कार्य।
JSON के साथ POST अनुरोध का उदाहरण:
use ureq;use serde::Serialize;
#[derive(Serialize)]struct NewTodo { title: String, completed: bool,}
fn main() -> Result<(), ureq::Error> { let todo = NewTodo { title: "Rust सीखें".into(), completed: false, };
let response = ureq::post("https://jsonplaceholder.typicode.com/todos") .set("Content-Type", "application/json") .send_json(&todo)?;
let status = response.status(); let body = response.into_string()?; println!("Status: {}, Body: {}", status, body); Ok(())}Ureq शुरुआती लोगों की गलतियों को माफ करता है और तेजी से प्रोटोटाइप बनाने की अनुमति देता है। हालाँकि, यह उच्च-लोड वाली एसिंक्रोनस प्रणालियों के लिए उपयुक्त नहीं है।
3. Hyper — इकोसिस्टम की नींव
Hyper एक निम्न-स्तरीय, एसिंक्रोनस लाइब्रेरी है, जिस पर reqwest और कई अन्य क्रेट्स बने हैं। यह HTTP कनेक्शन पर पूर्ण नियंत्रण देता है, लेकिन इसके लिए अधिक कोड और एसिंक्रोनस प्रोग्रामिंग की समझ की आवश्यकता होती है। इसका उपयोग प्रोडक्शन सिस्टम में किया जाता है जहाँ प्रदर्शन महत्वपूर्ण है (उदाहरण के लिए, डेटाबेस या प्रॉक्सी सर्वर में)।
मुख्य विशेषताएँ:
tokioपर आधारित एसिंक्रोनसिटी।- अनुरोध के प्रत्येक पहलू पर पूर्ण नियंत्रण।