0

پروژه ساخت یک اپلیکیشن ToDo با Rust

بازدید 31

آموزش

در این آموزش، شما یاد می گیرید چطور یک سرور وب با استفاده از Rust و چارچوب Actix-web بسازید. شما یک سرور پایه را راه اندازی خواهید کرد و مسیرهایی را برای مدیریت یک لیست ساده از موارد Todo ایجاد خواهید نمود که از عملیات های معمول RESTful مانند بازیابی و ایجاد Todos پشتیبانی می کند.

پیش نیازها

قبل از شروع، اطمینان حاصل کنید که موارد زیر را دارید:

  1. Rust نصب شده
  2. آشنایی با مبانی Rust از جمله متغیرها، توابع و ویژگی ها

مرحله 1 – راه اندازی سیستم عامل Ubuntu


  1. به روز رسانی لیست بسته ها: پس از ورود، لیست بسته ها را برای اطمینان از دریافت آخرین اطلاعات در دسترس بسته ها به روز کنید:

    sudo apt update

  2. نصب Rust: برای نصب Rust، از دستور زیر استفاده کنید که اسکریپت نصب Rust را دانلود و اجرا می کند:

    curl –proto ‘=https’ –tlsv1.2 -sSf https://sh.rustup.rs | sh

    دستورالعمل های ظاهر شده روی صفحه را برای تکمیل نصب دنبال کنید. پس از نصب، ممکن است لازم باشد ترمینال خود را مجدداً راه اندازی کنید یا اجرا کنید:

    source $HOME/cargo/env

  3. نصب کتابخانه های لازم: کتابخانه های موردنیاز برای ساخت برنامه های Rust را نصب کنید. می توانید build-essential و libssl-dev را با استفاده از دستور زیر نصب کنید:

    sudo apt install build-essential libssl-dev

  4. تأیید نصب Rust: برای اطمینان از اینکه Rust به درستی نصب شده است، نسخه را بررسی کنید:

    rustc –version

  5. نصب Cargo (مدیر بسته Rust): Cargo به طور خودکار با Rust نصب می شود. می توانید نصب آن را با بررسی نسخه تأیید کنید:

    cargo –version

مرحله 2 – راه اندازی پروژه

بیایید یک پروژه Rust جدید با نام sammy_todos با استفاده از cargo ایجاد کنیم.

cargo new sammy_todosCode 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 خود را به طور مؤثر ذخیره و مدیریت کنید. اکتشاف خود را ادامه دهید و برنامه‌نویسی جذابی داشته باشید!

نظرات کاربران

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *