آموزش
در این آموزش، شما یاد می گیرید چطور یک سرور وب با استفاده از Rust
و چارچوب Actix-web
بسازید. شما یک سرور پایه را راه اندازی خواهید کرد و مسیرهایی را برای مدیریت یک لیست ساده از موارد Todo ایجاد خواهید نمود که از عملیات های معمول RESTful مانند بازیابی و ایجاد Todos پشتیبانی می کند.
پیش نیازها
قبل از شروع، اطمینان حاصل کنید که موارد زیر را دارید:
- Rust نصب شده
- آشنایی با مبانی Rust از جمله متغیرها، توابع و ویژگی ها
مرحله 1 – راه اندازی سیستم عامل Ubuntu
به روز رسانی لیست بسته ها: پس از ورود، لیست بسته ها را برای اطمینان از دریافت آخرین اطلاعات در دسترس بسته ها به روز کنید: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
نصب Cargo (مدیر بسته Rust): Cargo به طور خودکار با Rust نصب می شود. می توانید نصب آن را با بررسی نسخه تأیید کنید:
cargo –version
مرحله 2 – راه اندازی پروژه
بیایید یک پروژه Rust جدید با نام sammy_todos
با استفاده از cargo
ایجاد کنیم.
cargo new sammy_todos
Code language: JavaScript (javascript)
سپس، فایل Cargo.toml
را پیدا کنید. به دایرکتوری پایه پروژه Rust خود بروید. فایل Cargo.toml
در همان دایرکتوری که پروژه خود را ایجاد کردهاید قرار دارد (مثلاً sammy_todos
). میتوانید از دستور زیر برای تغییر به دایرکتوری پروژه خود استفاده کنید:
cd sammy_todos/
ls
در زیر فایلهای پروژه Rust هستند که به صورت خودکار تولید میشوند:
<code data-shcb-language-name="bash">
Cargo.toml src</code>
Code language: HTML, XML (xml)
بستههای actix-web
و serde
را به عنوان وابستگی ها در Cargo.toml
اضافه کنید. اینجا serde
برای Serialization و Deserialization نیاز است.
vi Cargo.toml
و خطوط زیر را زیر بخش dependencies
اضافه کنید.
[dependencies]
actix-web = "4.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
Code language: JavaScript (javascript)
اکنون برای دانلود و کامپایل کردن وابستگیها، از دستور زیر استفاده کنید:
cargo build
Code language: HTTP (http)
مرحله 3 – ایجاد یک سرور پایه
در فایل main.rs
، خطوط کد زیر را برای تنظیم یک سرور پایه اضافه نمایید.
شما باید به پوشه src
در داخل پروژهی خود بروید.
use actix_web::{get, App, HttpServer, HttpResponse, Responder, web};
Code language: PHP (php)
#[get("/")]
async fn index() -> impl Responder {
HttpResponse::Ok().body("به API Todo Sammy خوش آمدید!")
}
Code language: CSS (css)
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.service(index)
})
.bind("127.0.0.1:8080")?
.run()
.await
}
Code language: CSS (css)
سرور را اجرا کنید:
cargo run
Code language: HTTP (http)
برای تست کردن سرور، یک سشن ترمینال جدید باز کرده و دستور زیر را اجرا کنید:
curl http://127.0.0.1:8080
Code language: JavaScript (javascript)
شما باید پاسخ زیر را دریافت کنید:
به API Todo Sammy خوش آمدید!
Code language: HTTP (http)
مرحله 4 – افزودن مدل Todo
برای سریالایز و دیسریالایز کردن درخواست و پاسخ، به یک مدل Todo نیاز داریم. خطوط کد زیر را درون فایل main.rs
اضافه کنید:
[label main.rs]
use serde::{Serialize, Deserialize};<code class="language-rust">
</code>
Code language: HTML, XML (xml)
#[derive(Serialize, Deserialize)]
struct Todo {
id: i32,
title: String,
completed: bool,
}
Code language: CSS (css)
مرحله 5 – پیادهسازی ایجاد Todo
این API یک Todo ایجاد میکند و این یک API شبیهسازی شده است که تنها Todo شما را برمیگرداند، اما میتوانید با استفاده از پایگاه داده آن را پایدار کنید:
[label main.rs]
#[get("/todos")]
async fn create_todo(todo: web::Json) -> impl Responder {
HttpResponse::Ok().body(serde_json::to_string(&todo).unwrap())
}
Code language: CSS (css)
مرحله 6 – پیادهسازی دریافت Todo
این API یک Todo را بر اساس id برمیگرداند:
[label main.rs]
#[get("/todos/{id}")]
async fn get_todo(id: web::Path) -> impl Responder {
let todo = Todo {
id: id.into_inner(),
title: "یادگیری Actix-Web".to_string(),
completed: false,
};
HttpResponse::Ok().body(serde_json::to_string(&todo).unwrap())
}
Code language: PHP (php)
بستن سرویسها با سرور ما
اینگونه فایل سرور راست main.rs
به نظر میرسد:
[label main.rs]
use actix_web::{get, App, HttpServer, HttpResponse, Responder, web};<code class="language-rust">
</code>
Code language: HTML, XML (xml)
#[get("/")]
async fn index() -> impl Responder {
HttpResponse::Ok().body("به API Todo Sammy خوش آمدید!")
}
Code language: CSS (css)
#[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
}
Code language: CSS (css)
use serde::{Serialize, Deserialize};
Code language: PHP (php)
#[derive(Serialize, Deserialize)] // مطمئن شوید که Deserialize وارد شده است
struct Todo {
id: i32,
title: String,
completed: bool,
}
Code language: PHP (php)
#[get("/todos")]
async fn create_todo(todo: web::Json) -> impl Responder {
HttpResponse::Ok()
body(serde_json::to_string(&todo).unwrap())
}
Code language: CSS (css)
#[get("/todos/{id}")]
async fn get_todo(id: web::Path) -> 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())
}
Code language: PHP (php)
اکنون، میتوانید با فرستادن یک درخواست POST
با استفاده از curl
آنرا آزمایش کنید:
curl -X POST -H "Content-Type: application/json" -d '{"title": "Buy groceries"}' http://127.0.0.1:8080/todos
Code language: JavaScript (javascript)
نتیجهگیری
تبریک میگوییم! شما با موفقیت یک سرور وب ابتدایی با استفاده از زبان برنامهنویسی Rust و کتابخانه Actix راهاندازی کردهاید. این آموزش به شما نحوه ساخت اندپوینت ها برای خواندن و ایجاد موارد Todo را آموخت و یک پایه محکم برای ساخت برنامههای پیچیدهتر فراهم کرد. برای پیشرفت بیشتر برنامه خود، در نظر بگیرید یک دیتابیس برای ثبت داده ها با اپلیکیشن تودو خود ادغام کنید، که به شما اجازه میدهد آیتمهای Todo خود را به طور مؤثر ذخیره و مدیریت کنید. اکتشاف خود را ادامه دهید و برنامهنویسی جذابی داشته باشید!
نظرات کاربران