giriiş
Bu eğitimde, DigitalOcean Droplet üzerinde Rust ve Actix-web framework'ü kullanarak bir web sunucusu oluşturmayı öğreneceksiniz. Bir çekirdek sunucu kuracak ve Todos öğelerinin alınması ve oluşturulması gibi yaygın RESTful işlemlerini destekleyen basit bir Todo öğeleri listesini yönetmek için rotalar oluşturacaksınız.
Ön koşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
- Bir DigitalOcean Bulut Hesabı Bir Droplet'i döndürmek için.
- Bir Ubuntu Droplet'i çalışıyor.
- Droplet'e Rust kuruldu.
- Değişkenler, fonksiyonlar ve nitelikler dahil olmak üzere Rust prensiplerine aşinalık.
Adım 1 – Ubuntu Droplet Kurulumu
DigitalOcean Droplet'inize SSH ile bağlanın: Terminalinizi açın ve Droplet'inize SSH ile bağlanmak için aşağıdaki komutu kullanın. your_username yerine gerçek kullanıcı adınızı ve your_droplet_ip yerine Droplet IP adresinizi yazın:
ssh your_username@your_droplet_ip
Paket Listesini Güncelle: Giriş yaptıktan sonra, mevcut paketler hakkında en güncel bilgilere sahip olduğunuzdan emin olmak için paket listesini güncelleyin:
sudo apt update
Rust'ı yükleyin: Rust'ı yüklemek için, Rust kurulum betiğini indirip çalıştıracak olan aşağıdaki komutu kullanın:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Kurulumu tamamlamak için ekrandaki talimatları izleyin. Kurulumdan sonra terminalinizi yeniden başlatmanız veya şu komutu çalıştırmanız gerekebilir:
source $HOME/.cargo/env
Temel kütüphaneleri yükleyin: Rust uygulamalarını derlemek için gereken kütüphaneleri yükleyin. build-essential ve libssl-dev'i şu şekilde yükleyebilirsiniz:
sudo apt install build-essential libssl-dev
Rust kurulumunu doğrulayın: Rust'ın doğru şekilde kurulduğunu doğrulamak için sürümü kontrol edin:
rustc --version
Cargo'yu (Rust Paket Yöneticisi) yükleyin: Cargo, Rust ile birlikte otomatik olarak yüklenir. Sürümü kontrol ederek kurulumunu doğrulayabilirsiniz:
cargo --version
Adım 2 – Projeyi başlatın
Yükü kullanarak sammy_todos adında yeni bir rust projesi oluşturalım
cargo new sammy_todos
Ardından Cargo.toml dosyasını bulun. Rust projenizin kök dizinine gidin. Cargo.toml dosyası, projenizi oluşturduğunuz dizinde bulunur (örneğin, sammy_todos). Proje dizininize geçmek için aşağıdaki komutu kullanabilirsiniz:
cd sammy_todos/
lsAşağıda otomatik olarak oluşturulan Rust proje dosyaları yer almaktadır:
Output
Cargo.toml srcCargo.toml dosyasına bağımlılık olarak actix-web ve serde'yi ekleyin. Burada, serileştirme ve serileştirmeyi kaldırma işlemleri için serde gereklidir.
vi Cargo.toml
Ve bağımlılıkların altına aşağıdaki satırları ekleyin.
[dependencies]
actix-web = "4.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"Şimdi bağımlılıkları indirmek ve derlemek için aşağıdaki komutu kullanın:
cargo build
Adım 3 – Temel Bir Sunucu Oluşturun
main.rs dosyasına, ana sunucuyu başlatmak için aşağıdaki kod satırlarını ekleyin. Projenizin içindeki src dizinine gitmeniz gerekiyor.
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
}Sunucuyu çalıştırın:
cargo run
Sunucuyu test etmek için yeni bir terminal oturumu açın ve aşağıdaki komutu çalıştırın:
curl http://127.0.0.1:8080
Aşağıdaki yanıtı almalısınız:
Output
Welcome to the Sammy Todo API!Adım 4 – Bir Yapılacaklar Modeli Ekleyin
İstek ve yanıtı serileştirmek için Todo modeli gereklidir. main.rs dosyasına aşağıdaki kod satırlarını ekleyin.
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct Todo {
id: i32,
title: String,
completed: bool,
}Adım 5 – Yapılacaklar Listesini Oluştur'u Uygula
Bu API, yapılacaklar listesini oluşturur ve yalnızca yapılacaklar listenizi döndüren bir kukla API'dir; ancak bunu kalıcı hale getirmek için veritabanlarıyla uygulayabilirsiniz.
#[get("/todos")]
async fn create_todo(todo: web::Json<Todo>) -> impl Responder {
HttpResponse::Ok().body(serde_json::to_string(&todo).unwrap())
}
Adım 6 – Çalıştırın ve Yapılacaklar Listesini Alın
Bu API, yapılacak işi şu kimlikle döndürür:
#[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())
}Hizmeti sunucunuza bağlayın
Rust sunucusunun main.rs dosyası şu şekilde görünüyor:
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())
}Şimdi bunu curl ile bir POST isteği göndererek test edebilirsiniz:
curl -X POST -H "Content-Type: application/json" -d '{"title": "Buy groceries"}' http://127.0.0.1:8080/todos
Sonuç
Tebrikler! Rust ve Actix kullanarak temel bir web sunucusunu başarıyla kurdunuz. Bu eğitim, Yapılacaklar öğelerini almak ve oluşturmak için uç noktaların nasıl oluşturulacağını öğreterek, daha karmaşık uygulamalar oluşturmak için sağlam bir temel oluşturacaktır. Uygulamanızı daha da geliştirmek için, Yapılacaklar öğelerinizi verimli bir şekilde depolamanıza ve yönetmenize olanak tanıyan veri kalıcılığı sağlayan bir veritabanı çözümü entegre edin.









