دليل Warp لـ Rust: دليل شامل مع أمثلة

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

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

ابدأ الدورة

ما هو Warp ولماذا تحتاجه؟

Warp هو إطار عمل ويب حديث، غير متزامن (asynchronous)، وقابل للتركيب (composable) للغة Rust، مبني على مكتبة hyper وبيئة التشغيل غير المتزامنة tokio. فلسفته الأساسية هي استخدام المرشحات (filters) التي يتم دمجها مثل قطع الليغو لبناء مسارات معقدة ومعالجات الطلبات.

Warp مثالي لبناء خوادم ويب عالية الأداء، واجهات برمجة التطبيقات REST، الخدمات المصغرة (microservices)، وحتى تطبيقات الويب البسيطة. بفضل نظام الأنواع الصارم في Rust ونظام المرشحات القوي، يساعدك Warp على تجنب العديد من الأخطاء في مرحلة الترجمة، مما يضمن أمان الكود وقابليته للتوقع.

لماذا تستخدم Warp؟

  • الأداء العالي: Rust + async/await يمنحك سرعة تقارن بلغات مثل C/C++.
  • الأمان: مترجم Rust يتحقق من الأنواع والذاكرة، وWarp يتحقق من صحة المسارات.
  • قابلية التركيب: يمكن دمج المرشحات وإعادة استخدامها واختبارها بشكل منفصل.
  • البساطة: لا يوجد ماكروات أو سحر - كل شيء مبني على الدوال والإغلاقات (closures).
  • غير متزامن بشكل افتراضي: دعم WebSocket، نقل البيانات المتدفق، والاتصالات الطويلة.

تثبيت Warp

Warp هي مكتبة لـ Rust، لذا يتم التثبيت عبر مدير الحزم cargo. تأكد من تثبيت Rust (يفضل الإصدار 1.70 أو أحدث).

أنشئ مشروعًا جديدًا:

cargo new my_warp_app
cd my_warp_app

أضف التبعيات إلى ملف Cargo.toml:

[dependencies]
warp = "0.3"
tokio = { version = "1", features = ["full"] }

ثم قم ببناء المشروع:

cargo build

إذا كنت تستخدم Windows، قد تحتاج إلى تثبيت Build Tools for Visual Studio لعملية الترجمة.

بداية سريعة: أول خادم باستخدام Warp

أنشئ خادم HTTP بسيطًا يرد بـ "Hello, World!" على أي طلب GET.

use warp::Filter;

#[tokio::main]
async fn main() {
    // تعريف المسار: GET / -> "Hello, World!"
    let hello = warp::path::end()
        .map(|| "Hello, World!");

    // تشغيل الخادم على المنفذ 3030
    warp::serve(hello)
        .run(([127, 0, 0, 1], 3030))
        .await;
}

قم بتشغيل الخادم باستخدام الأمر cargo run وافتح المتصفح على الرابط http://127.0.0.1:3030. ستظهر لك رسالة "Hello, World!".

الدوال والأساليب الأساسية في Warp

فيما يلي الدوال الرئيسية في Warp مع شرح مفصل وأمثلة.

1. warp::any()

الوظيفة: تنشئ مرشحًا يطابق أي طلب (الطريقة، المسار، الترويسات - كلها مقبولة). يُستخدم كقاعدة للدمج.

المعاملات: لا يوجد.

مثال:

use warp::Filter;

let any_route = warp::any()
    .map(|| "هذا يطابق أي طلب");

2. warp::path(String)

الوظيفة: تنشئ مرشحًا يطابق جزءًا محددًا من المسار. على سبيل المثال، warp::path("api") يطابق /api.

المعاملات: path: impl Into<String> — نص المسار.

مثال:

use warp::Filter;

let api_route = warp::path("api")
    .map(|| "نقطة نهاية API");

3. warp::path::param()

الوظيفة: تستخرج معاملًا ديناميكيًا من المسار (مثل معرف المستخدم). تُرجع قيمة من نوع String (أو يمكن تحديد نوع آخر يطبق FromStr).

المعاملات: لا يوجد (يتم استنتاج النوع من السياق).

مثال:

use warp::Filter;

let user_route = warp::path("users")
    .and(warp::path::param())
    .map(|id: String| format!("معرف المستخدم: {}", id));

توصيات