كيفية إعداد خادم الويب باستخدام Rust و Actix

0 الأسهم
0
0
0
0

مقدمة

في هذا البرنامج التعليمي، ستتعلم كيفية بناء خادم ويب باستخدام Rust وإطار عمل Actix-web على منصة DigitalOcean Droplet. ستقوم بإعداد خادم أساسي وإنشاء مسارات لإدارة قائمة بسيطة من عناصر المهام، والتي تدعم عمليات RESTful الشائعة، مثل استرداد وإنشاء عناصر المهام.

المتطلبات الأساسية

قبل أن تبدأ، تأكد من أن لديك ما يلي:

  • واحد حساب DigitalOcean السحابي لتدوير القطرة.
  • تم تشغيل Ubuntu Droplet الآن.
  • تم تثبيت الصدأ على Droplet.
  • المعرفة بمبادئ Rust بما في ذلك المتغيرات والوظائف والسمات.

الخطوة 1 - إعداد Ubuntu Droplet

الدخول إلى دروبليت DigitalOcean عبر SSH: افتح طرفية جهازك واستخدم الأمر التالي للدخول إلى دروبليت عبر SSH. استبدل your_username باسم المستخدم الحالي وyour_droplet_ip بعنوان IP الخاص بك.

ssh your_username@your_droplet_ip

تحديث قائمة الحزم: بعد تسجيل الدخول، قم بتحديث قائمة الحزم للتأكد من حصولك على أحدث المعلومات حول الحزم المتوفرة:

sudo apt update

تثبيت Rust: لتثبيت Rust، استخدم الأمر التالي، الذي سيقوم بتنزيل البرنامج النصي لتثبيت Rust وتشغيله:

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

اتبع التعليمات التي تظهر على الشاشة لإكمال التثبيت. بعد التثبيت، قد تحتاج إلى إعادة تشغيل جهازك أو تشغيل:

source $HOME/.cargo/env

تثبيت المكتبات الأساسية: ثبّت المكتبات اللازمة لبناء تطبيقات Rust. يمكنك تثبيت build-essential وlibssl-dev باستخدام:

sudo apt install build-essential libssl-dev

التحقق من تثبيت Rust: للتأكد من تثبيت Rust بشكل صحيح، تحقق من الإصدار:

rustc --version

تثبيت كارغو (مدير حزم Rust): يُثبّت كارغو تلقائيًا مع Rust. يمكنك التحقق من تثبيته بالتحقق من الإصدار:

cargo --version

الخطوة 2 – إطلاق المشروع

دعنا ننشئ مشروع صدأ جديد sammy_todos باستخدام الحمولة

cargo new sammy_todos

ابحث بعد ذلك عن ملف Cargo.toml. انتقل إلى المجلد الجذر لمشروع Rust. يوجد ملف Cargo.toml في نفس المجلد الذي أنشأت فيه مشروعك (مثل sammy_todos). يمكنك استخدام الأمر التالي للانتقال إلى مجلد مشروعك:

cd sammy_todos/
ls

فيما يلي ملفات مشروع Rust التي يتم إنشاؤها تلقائيًا:

Output
Cargo.toml src

أضف actix-web وserde كاعتماديتين في Cargo.toml. هنا، serde مطلوب للتسلسل وإلغاء التسلسل.

vi Cargo.toml

وأضف الأسطر التالية تحت التبعيات.

[dependencies]
actix-web = "4.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

الآن استخدم الأمر التالي لتنزيل التبعيات وتجميعها:

cargo build

الخطوة 3 – إنشاء خادم أساسي

في ملف main.rs، أضف الأسطر التالية من التعليمات البرمجية لبدء تشغيل الخادم الرئيسي. يجب عليك الانتقال إلى دليل src داخل مشروعك.

use actix_web::{get, App, HttpServer, HttpResponse, Responder,web};
#[get("/")]
async fn index() -> impl Responder {
HttpResponse::Ok().body("Welcome to the Sammy Todo API!")
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.service(index)
})
.bind("127.0.0.1:8080")?
.run()
.await
}

تشغيل الخادم:

cargo run

لاختبار الخادم، افتح جلسة طرفية جديدة وقم بتشغيل الأمر التالي:

curl http://127.0.0.1:8080

يجب أن تتلقى الرد التالي:

Output
Welcome to the Sammy Todo API!

الخطوة 4 - إضافة نموذج المهام

نموذج Todo مطلوب لتسلسل الطلب والاستجابة. أضف أسطر التعليمات البرمجية التالية إلى ملف main.rs.

use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct Todo {
id: i32,
title: String,
completed: bool,
}

الخطوة 5 - تنفيذ إنشاء المهام

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

#[get("/todos")]
async fn create_todo(todo: web::Json<Todo>) -> impl Responder {
HttpResponse::Ok().body(serde_json::to_string(&todo).unwrap())
}

الخطوة 6 - تشغيل Get todo

تعيد هذه الواجهة البرمجية المهام التي تحتوي على المعرف:

#[get("/todos/{id}")]
async fn get_todo(id: web::Path<i32>) -> impl Responder {
let todo = Todo {
id: id.into_inner(),
title: "Learn Actix-Web".to_string(),
completed: false,
};
HttpResponse::Ok().body(serde_json::to_string(&todo).unwrap())
}

ربط الخدمة بخادمك

يبدو خادم الصدأ main.rs مثل هذا:

use actix_web::{get, App, HttpServer, HttpResponse, Responder, web};
#[get("/")]
async fn index() -> impl Responder {
HttpResponse::Ok().body("Welcome to the Sammy Todo API!")
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.service(index)
.service(get_todo)
.service(create_todo)
})
.bind("127.0.0.1:8080")?
.run()
.await
}
use serde::{Serialize, Deserialize}; // Added Deserialize to imports
#[derive(Serialize, Deserialize)] // Ensure Deserialize is imported
struct Todo {
id: i32,
title: String,
completed: bool,
}
#[get("/todos")]
async fn create_todo(todo: web::Json<Todo>) -> impl Responder {
HttpResponse::Ok().body(serde_json::to_string(&todo).unwrap())
}
#[get("/todos/{id}")]
async fn get_todo(id: web::Path<i32>) -> impl Responder {
let todo = Todo {
id: id.into_inner(),
title: "Learn Actix-Web".to_string(),
completed: false,
};
HttpResponse::Ok().body(serde_json::to_string(&todo).unwrap())
}

الآن، يمكنك اختبار ذلك عن طريق إرسال طلب POST باستخدام curl:

curl -X POST -H "Content-Type: application/json" -d '{"title": "Buy groceries"}' http://127.0.0.1:8080/todos

نتيجة

تهانينا! لقد نجحت في إعداد خادم ويب أساسي باستخدام Rust و Actix. سيُعلّمك هذا البرنامج التعليمي كيفية إنشاء نقاط نهاية لاسترجاع وإنشاء عناصر المهام، مما يوفر أساسًا متينًا لبناء تطبيقات أكثر تعقيدًا. لتحسين تطبيقك بشكل أكبر، قم بدمج حل قاعدة بيانات لاستدامة البيانات، مما يُمكّنك من تخزين عناصر المهام وإدارتها بكفاءة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

قد يعجبك أيضاً