عميل HTTP لـ Rust: أفضل المكتبات والأدوات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

عميل HTTP لـ Rust: نظرة عامة على أفضل المكتبات



Rust هي لغة برمجة أنظمة تكتسب شعبية في تطوير الويب وإنشاء الخدمات عالية التحميل. إحدى المهام الرئيسية لأي تطبيق شبكي هي إرسال طلبات HTTP. في هذه المقالة، سنستعرض أفضل المكتبات للعمل مع HTTP في Rust، وميزاتها، وأدائها، وأمثلة على الاستخدام. ستكون المادة مفيدة لكل من المبتدئين والمطورين ذوي الخبرة الذين يختارون أداة لمشروعهم.



1. reqwest — الخيار الشامل



reqwest هي مكتبة HTTP الأكثر شعبية في نظام Rust البيئي. وهي مبنية على أساس hyper و tokio، ولكنها توفر واجهة برمجة تطبيقات عالية المستوى ومريحة. تدعم كلاً من الوضع غير المتزامن (افتراضيًا) والوضع المحظور (من خلال ميزة blocking).



الإمكانيات الرئيسية:

  • طلبات غير متزامنة ومتزامنة
  • معالجة تلقائية لـ JSON (التسلسل/إلغاء التسلسل عبر serde)
  • دعم TLS، وملفات تعريف الارتباط، والبروكسي
  • إعادة التوجيه والمهلات الزمنية
  • تحميل الملفات و multipart/form-data


مثال على طلب GET غير متزامن:

use reqwest;use serde::Deserialize;

#[derive(Deserialize, Debug)]struct User { id: u32, name: String, email: String,}

#[tokio::main]async fn main() -> Result<(), reqwest::Error> { let user: User = reqwest::get("https://jsonplaceholder.typicode.com/users/1") .await? .json() .await?; println!("{:?}", user); Ok(())}


مثال على طلب POST محظور:

use reqwest::blocking::Client;use serde_json::json;

fn main() -> Result<(), reqwest::Error> { let client = Client::new(); let resp = client.post("https://httpbin.org/post") .json(&json!({"key": "value"})) .send()?; println!("Status: {}", resp.status()); Ok(())}


الإيجابيات: مجتمع ضخم، توثيق ممتاز، مرونة. السلبيات: حجم ثنائي كبير نسبيًا، اعتماد على tokio.



2. ureq — عميل متزامن بسيط



ureq هي مكتبة خفيفة وبسيطة بدون عدم تزامن. مثالية للنصوص البرمجية، وأدوات سطر الأوامر، والحالات التي لا تحتاج فيها إلى tokio. تعمل «مباشرة من الصندوق» دون إعداد وقت التشغيل.



الميزات:

  • طلبات متزامنة فقط
  • الحد الأدنى من التبعيات
  • دعم HTTPS، وملفات تعريف الارتباط، وإعادة التوجيه
  • JSON مدمج (من خلال ميزة json)


مثال:

use ureq;

fn main() -> Result<(), ureq::Error> { let body: String = ureq::get("https://api.github.com/repos/rust-lang/rust") .call()? .into_string()?; println!("{}", &body[..200]); Ok(())}


الإيجابيات: البساطة، الوزن الخفيف، وقت ترجمة سريع. السلبيات: لا يوجد عدم تزامن، إمكانيات محدودة للسيناريوهات المعقدة.



3. hyper — الأساس منخفض المستوى



hyper هي مكتبة HTTP أساسية لـ Rust، والتي بُنيت عليها reqwest والعديد من المكتبات الأخرى. توفر تحكمًا كاملاً في البروتوكول، ولكنها تتطلب المزيد من الكود وفهم عدم التزامن.



متى تستخدم: إذا كنت بحاجة إلى أقصى أداء، أو بروتوكولات غير قياسية، أو إذا كنت تبني إطار عمل HTTP خاص بك.



مثال على عميل بسيط:

use hyper::{Client, Uri};use hyper::body::HttpBody as _;use tokio;

#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let client = Client::new(); let uri: Uri = "

توصيات