كيفية كتابة REST API على Rust في 30 دقيقة: دليل خطوة بخطوة

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

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

ابدأ الدورة

مقدمة: لماذا Rust لواجهات REST API؟



Rust هي لغة برمجة نظام حديثة تجمع بين أداء C/C++ وأمان الذاكرة. في السنوات الأخيرة، تم استخدامها بنشاط لبناء خدمات الويب عالية التحميل وواجهات REST API. بفضل إطار العمل Actix-web، يمكنك كتابة واجهة REST API كاملة بلغة Rust في 30 دقيقة فقط، حتى لو كنت قد بدأت للتو في تعلم اللغة.



في هذه المقالة، سنقوم بإنشاء واجهة REST API بسيطة ولكنها عملية لإدارة قائمة المهام (Todo List). ستتعلم:



  • إعداد مشروع Rust باستخدام Actix-web
  • تنفيذ عمليات CRUD (إنشاء، قراءة، تحديث، حذف)
  • العمل مع طلبات واستجابات JSON
  • استخدام التوجيه والمعالجات


هل أنت مستعد؟ لنبدأ!



الخطوة 1: إعداد المشروع وتثبيت التبعيات



أولاً، تأكد من تثبيت Rust. إذا لم يكن مثبتًا، قم بتنفيذ الأمر التالي:



curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh


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



cargo new rust_todo_apicd rust_todo_api


افتح ملف Cargo.toml وأضف التبعيات التالية:



[dependencies]actix-web = "4"serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"tokio = { version = "1", features = ["full"] }


هنا:

  • actix-web — إطار عمل ويب غير متزامن وقوي
  • serde — للتسلسل/إلغاء التسلسل لـ JSON
  • tokio — بيئة تشغيل غير متزامنة (يستخدمها Actix-web داخليًا)


نفذ الأمر cargo build لتنزيل التبعيات وتجميعها. سيستغرق ذلك 2-3 دقائق.



الخطوة 2: إنشاء نموذج البيانات والتخزين



في هذا المشروع، لن نستخدم قاعدة بيانات — للتبسيط، سنستخدم مصفوفة ديناميكية في الذاكرة. سننشئ هيكلًا للمهمة.



افتح ملف src/main.rs واكتب الكود التالي:



use actix_web::{web, App, HttpServer, HttpResponse, middleware};use serde::{Deserialize, Serialize};use std::sync::Mutex;

// نموذج المهمة#[derive(Serialize, Deserialize, Clone)]struct Task { id: u32, title: String, completed: bool,}

// تخزين المهام (آمن للخيوط)struct AppState { tasks: Mutex<Vec<Task>>,}


التوضيحات:

  • #[derive(Serialize, Deserialize)] — يولد تلقائيًا دوال للعمل مع JSON
  • Mutex — يضمن الوصول الآمن إلى البيانات من خيوط متعددة
  • AppState — سيتم تخزينه في حالة التطبيق


الخطوة 3: تنفيذ معالجات CRUD



الآن سنضيف دوال المعالجة لكل طريقة HTTP. أضف الكود التالي بعد تعريف الهياكل:



// الحصول على جميع المهامasync fn get_tasks(data: web::Data<AppState>) -> HttpResponse {    let tasks = data.tasks.lock().unwrap();    HttpResponse::Ok().json(tasks.clone())}

// إنشاء مهمة جديدةasync fn create_task(data: web::Data<AppState>, body: web::Json<Task>) -> HttpResponse { let mut tasks = data.tasks.lock().unwrap(); let new_id = tasks.len() as u32 + 1; let task = Task { id: new_id, title: body.title.clone(), completed: body.completed, }; tasks.push(task.clone()); HttpResponse::Created().json(task)}

// تحديث مهمةasync fn update_task( data: web::Data<AppState>, path: web::Path<u32>, body: web::Json<Task>,) -> HttpResponse { let mut tasks = data.tasks.lock().unwrap(); let id = path.into_inner(); if let Some(task) = tasks.iter_mut().find(|t| t.id == id) { task.title = body.title.clone(); task.completed = body.completed; HttpRespons

المدونات

توصيات الكتب