Rust में HTTP क्लाइंट: सही तरीके से अनुरोध करना
Rust एक आधुनिक सिस्टम प्रोग्रामिंग भाषा है, जो C++ के प्रदर्शन और मेमोरी सुरक्षा को जोड़ती है। वेब एप्लिकेशन, माइक्रोसर्विसेज या कमांड-लाइन टूल्स विकसित करते समय, बाहरी API के साथ इंटरैक्ट करने की आवश्यकता अक्सर उत्पन्न होती है। इस लेख में, हम लोकप्रिय क्रेट्स reqwest और ureq का उपयोग करके Rust में HTTP-क्लाइंट बनाने का तरीका समझेंगे। आप सीखेंगे कि GET और POST अनुरोध कैसे भेजें, त्रुटियों को कैसे संभालें और JSON के साथ कैसे काम करें।
HTTP अनुरोधों के लिए Rust क्यों?
Rust नेटवर्किंग के लिए अद्वितीय लाभ प्रदान करता है:
- मेमोरी सुरक्षा — कंपाइलर मेमोरी लीक और डेटा रेस की अनुपस्थिति की गारंटी देता है।
- उच्च प्रदर्शन — गति C/C++ के बराबर है।
- अतुल्यकालिकता — I/O के साथ कुशल कार्य के लिए async/await का अंतर्निहित समर्थन।
- क्रेट्स का पारिस्थितिकी तंत्र — हजारों तैयार लाइब्रेरी, जिनमें HTTP-क्लाइंट शामिल हैं।
Rust में HTTP के साथ काम करने के दो मुख्य दृष्टिकोण हैं: सिंक्रोनस (ब्लॉकिंग) और एसिंक्रोनस (नॉन-ब्लॉकिंग)। हम दोनों पर विचार करेंगे।
प्रोजेक्ट सेटअप और क्रेट का चयन
एक नया Rust प्रोजेक्ट बनाएं:
cargo new rust-http-clientcd rust-http-clientCargo.toml खोलें और निर्भरताएँ जोड़ें:
[dependencies]# अतुल्यकालिक अनुरोधों के लिएreqwest = { version = "0.12", features = ["json"] }tokio = { version = "1", features = ["full"] }
# सिंक्रोनस अनुरोधों के लिए (विकल्प)ureq = "2.9"क्रेट्स की तुलना:
- reqwest — सबसे लोकप्रिय HTTP-क्लाइंट। अतुल्यकालिकता, JSON, कुकीज़, प्रॉक्सी का समर्थन करता है।
- ureq — हल्का सिंक्रोनस क्लाइंट। सरल स्क्रिप्ट और CLI-टूल्स के लिए आदर्श।
1. reqwest के साथ GET-अनुरोध (अतुल्यकालिक)
एक अतुल्यकालिक GET-अनुरोध से शुरू करें। फ़ाइल src/main.rs बनाएं:
use reqwest;use std::error::Error;
#[tokio::main]async fn main() -> Result<(), Box<dyn Error>> { // GET-अनुरोध भेजें let response = reqwest::get("https://api.github.com/repos/rust-lang/rust") .await? .text() .await?;
println!("GitHub API से उत्तर:"); println!("{}", &response[..500]); // पहले 500 अक्षर प्रिंट करें
Ok(())}व्याख्या:
#[tokio::main]— Tokio एसिंक्रोनस रनटाइम शुरू करने के लिए मैक्रो।reqwest::get()— GET-अनुरोध भेजता है औरResponseलौटाता है।.await?— ऑपरेशन पूरा होने की प्रतीक्षा करता है और त्रुटियों को संभालता है।.text()— प्रतिक्रिया के मुख्य भाग को स्ट्रिंग के रूप में निकालता है।
प्रोजेक्ट चलाएं:
cargo runआप GitHub API से JSON उत्तर देखेंगे।
2. JSON के साथ POST-अनुरोध (reqwest)
अब JSON प्रारूप में बॉडी के साथ POST-अनुरोध भेजें:
use reqwest;use serde::{Deserialize, Serialize};use std::error::Error;
#[derive(Serialize, Deserialize, Debug)]struct Post { title: String, body: String, user_id: u32,}
#[derive(Deserialize, Debug)]struct CreatedPost { id: u32, title: String,}
#[tokio::main]async fn main() -> Result<(), Box<dyn Error>> { // सेटिंग्स के साथ क्लाइंट बनाएं let client = reqwest::Client::new();
// भेजने के लिए डेटा let new_post = Post { title: "Rust में HTTP क्लाइंट".to_string(), body: "Rust में HTTP के साथ काम करने की पूरी गाइड".to_string(), user_id: 1, };
// POST-अनुरोध भेजें let response = client .post("https://jsonplaceholder.typicode.com/posts") .json(&new_post) .send() .await?;
//