عميل HTTP لـ Rust: نظرة عامة على أفضل المكتبات (reqwest, ureq, hyper)

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

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

ابدأ الدورة

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



Rust هي لغة برمجة أنظمة تُستخدم بشكل متزايد لإنشاء خدمات الويب والخدمات المصغرة وأدوات العمل مع الشبكة. اختيار عميل HTTP المناسب أمر بالغ الأهمية للأداء والأمان وسهولة التطوير. في هذه المقالة، سنستعرض ثلاثًا من أشهر المكتبات لتنفيذ طلبات HTTP في نظام Rust البيئي: reqwest و ureq و hyper. لكل منها نقاط قوتها الخاصة وتناسب سيناريوهات مختلفة.



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



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



الميزات الرئيسية:

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


مثال لطلب 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) والبرامج النصية والمواقف التي لا تحتاج فيها إلى عدم التزامن.



الميزات الرئيسية:

  • واجهة برمجة تطبيقات متزامنة بالكامل (حظر).
  • الحد الأدنى من التبعيات (لا يتطلب tokio).
  • دعم مدمج لـ JSON وملفات تعريف الارتباط.
  • عمل بسيط مع الرؤوس والمعاملات.


مثال لطلب POST مع JSON:

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); Ok(())}


Ureq يغفر أخطاء المبتدئين ويسمح بالنمذجة الأولية السريعة. ومع ذلك، فهو غير مناسب للأنظمة غير المتزامنة عالية التحميل.



3. Hyper — أساس النظام البيئي



Hyper هي مكتبة غير متزامنة منخفضة المستوى، بُنيت عليها reqwest والعديد من الكريتات الأخرى. إنها تمنحك تحكمًا كاملاً في اتصال HTTP، ولكنها تتطلب المزيد من الكود وفهم البرمجة غير المتزامنة. تُستخدم في أنظمة الإنتاج حيث يكون الأداء أمرًا بالغ الأهمية (على سبيل المثال، في قواعد البيانات أو خوادم البروكسي).



الميزات الرئيسية:

  • عدم التزامن القائم على tokio.
  • تحكم كامل في كل جانب من جوانب الطلب.

توصيات