Cara Membangun Server Web HTTP Dasar di Rust
Table of content:
HTTP menggunakan arsitektur client-server untuk transfer informasi dan data. Salah satu fitur bahasa pemrograman sisi server seperti Rust adalah mengembangkan server dan aplikasi klien untuk berinteraksi dengan layanan berbasis HTTP.
Rust cocok untuk membangun server HTTP karena fitur keamanan, kinerja, dan keandalannya. Peti pihak ketiga Rust seperti Actix dan Rocket populer untuk membangun server web canggih yang dapat menangani lalu lintas tinggi.
Mengapa Anda Harus Menggunakan Rust untuk Pengembangan Server Web HTTP?
Rust telah mendapatkan popularitas untuk pengembangan server web karena beberapa fitur bahasanya persis dengan persyaratan untuk membangun sebagian besar server web.
Menggunakan Rust memastikan skala aplikasi Anda secara efisien, menjadikan bahasa ini ideal untuk membuat aplikasi berperforma tinggi. Berikut adalah alasan khusus untuk mempertimbangkan menggunakan Rust untuk server web Anda dan aplikasi sisi server lainnya.
Performa Tinggi Rust
Performa tinggi adalah salah satu alasan Rust membuat pilihan yang sangat baik untuk membangun server web HTTP. Rust menyediakan akses tingkat rendah ke sumber daya sistem, termasuk memori dan CPU, memungkinkan Anda menulis kode yang berjalan lebih cepat dengan sumber daya lebih sedikit daripada bahasa sisi server lainnya.
Selain itu, sistem kepemilikan Rust menghilangkan kebutuhan untuk pengumpulan sampah pada waktu kompilasi, yang merupakan salah satu alasan beberapa bahasa sisi server lambat.
Keselamatan dan keamanan
Sistem kepemilikan manajemen memori Rust membuat bahasa aman untuk pengembangan server web. Anda tidak mengalami referensi null atau penunjuk menggantung yang dapat menyebabkan kebocoran memori dan kerentanan keamanan lainnya.
Sistem kepemilikan Rust mencegah kesalahan umum ini untuk menjaga keamanan server dan aplikasi Anda. Rust juga berfokus pada pencegahan buffer overflows dan kesalahan terkait memori lainnya.
Konkurensi
Concurrency adalah kemampuan untuk menjalankan beberapa unit program secara out-of-order tanpa mempengaruhi output. Keluaran dari program bersamaan harus sama dengan keluaran program asinkron.
Konkurensi dapat memengaruhi kinerja aplikasi Anda secara signifikan karena server harus menangani beberapa permintaan secara bersamaan. Rust memberikan dukungan untuk koeksistensi dengan model threading yang ringan.
Saus pemrograman bersamaan di Rust adalah bahwa sistem kepemilikan memungkinkan Anda untuk menulis kode yang aman tanpa perlu kunci dan primitif sinkronisasi lainnya.
Karat Menyediakan Perkakas Modern
Pustaka Standar Rust dan paket pihak ketiga dalam ekosistem Rust menyediakan alat modern untuk pengembangan server web yang efektif.
Cargo, manajer paket Rust, menyederhanakan manajemen ketergantungan dan membangun proses. Selain itu, Rust memiliki dukungan IDE yang sangat baik dengan alat seperti Rust Analyzer yang menyediakan penyelesaian kode yang mulus, penyorotan kesalahan, dan fitur lainnya.
Tinjauan Perpustakaan Actix dan Rocket
Perpustakaan Standar Rust memiliki sebagian besar utilitas yang Anda perlukan untuk membangun server web. Perpustakaan pihak ketiga suka Roket Dan Actix sederhanakan pembuatan aplikasi sisi server dengan Rust.
Actix Dan Roket adalah kerangka kerja web Rust yang populer, tetapi perpustakaan berbeda dalam desain dan fitur.
Rocket adalah kerangka kerja web tingkat tinggi yang memprioritaskan produktivitas dan kemudahan penggunaan. Rocket menyediakan banyak abstraksi dan gula sintaks untuk membangun aplikasi web di Rust. Rocket juga populer untuk pengetikan yang kuat dan desain API yang intuitif.
Anda dapat menambahkan Rocket sebagai ketergantungan proyek di Kargo.toml file untuk mulai membuat aplikasi web di Rust:
[dependencies]
rocket = "0.4.11"
Di sisi lain, Actix-web adalah kerangka kerja tingkat rendah yang memprioritaskan kinerja dan skalabilitas. Actix memanfaatkan model konkurensi berbasis aktor dan menyediakan I/O non-pemblokiran yang menjadikan paket ini ideal untuk membangun aplikasi web yang berkinerja baik.
Tambahkan Actix sebagai ketergantungan proyek di dependencies bagian Anda Kargo.toml mengajukan:
[dependencies]
actix-web = "4.3.1"
Memilih perpustakaan untuk proyek Anda akan bergantung pada spesifikasi proyek Anda, fitur perpustakaan, dan pengalaman Anda dengan Rust dan HTTP.
Membangun Server Web Sederhana di Rust
Setelah membuat proyek Rust dan menambahkan salah satu kerangka kerja Rocket atau Actix ke dependensi proyek Anda di Kargo.toml file, Anda siap untuk mulai membangun server web di Rust.
Membangun Server Web Sederhana Dengan Actix
Anda dapat menggunakan serializer untuk permintaan saat membangun layanan web di Rust.
Serde adalah pustaka Rust yang populer untuk serialisasi dan deserialisasi data antara tipe Rust dan format data seperti JSON, YAML, dan TOML. Serde menyediakan kerangka kerja untuk menentukan konversi data antara struktur data Rust dan representasi yang sesuai dalam format data lainnya.
Inilah arahan untuk menambahkan Serde sebagai paket pihak ketiga untuk proyek Anda.
[dependencies]
serde = { version = "1.0.159" , features = ["derive"] }
Setelah Anda menambahkan Serde dan Actix sebagai dependensi proyek, Anda dapat menelurkan server web dasar dengan Rust. Berikut adalah bagaimana Anda dapat mengatur sederhana Halo Dunia! server web yang menulis string ke klien dengan Actix:
Pertama, impor modul dan tipe yang diperlukan dari actix_web Dan serde peti:
use actix_web::{get, web, App, HttpResponse, HttpServer, Responder};
use serde::{Deserialize, Serialize};
Anda akan menggunakan serde untuk membuat cerita bersambung pesan ke klien dengan struct. Serde akan mengubah struct menjadi JSON untuk klien. Inilah struct untuk pesan tersebut:
#[derive(Debug, Serialize, Deserialize)]
struct Message {
message: String,
}
Anda sekarang dapat menentukan fungsi penangan untuk titik akhir. Di bagian atas fungsi penangan Anda, Anda dapat menambahkan dekorator untuk perilaku khusus:
#[get("https://www.makeuseof.com/")]
async fn hello() -> impl Responder {
HttpResponse::Ok().json(Message {
message: "Hello, World!".to_owned(),
})
}
Itu Halo fungsi handler menangani permintaan GET. Fungsi mengembalikan tipe yang mengimplementasikan Responden sifat dari Actix kemasan.
Itu json metode dari HttpResponse::Ok() type mengambil contoh struct itu Serde menangani di bawah tenda dan mengembalikan respons ke klien.
Setelah menentukan titik akhir, Anda dapat memulai instance server dan memasang titik akhir pada rute.
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().service(hello))
.bind("127.0.0.1:8080")?
.run()
.await
}
Itu HttpServer::baru function adalah instance server baru. Itu utama fungsi dimulai, dan server me-mount Halo fungsi handler dengan instance aplikasi baru. Itu mengikat metode mengikat server ke URL yang ditentukan, dan berlari fungsi menjalankan server.
Membangun Server Web Sederhana Dengan Rocket
Rocket minimalis, sehingga Anda dapat menyiapkan server web sederhana tanpa ketergantungan apa pun selain Roket peti.
Berikut cara menyiapkan server sederhana dengan a Halo Dunia! titik akhir menggunakan Rocket:
Pertama, impor dependensi yang diperlukan untuk server Anda.
#![feature(proc_macro_hygiene, decl_macro)]#[macro_use]
extern crate rocket;
use rocket::response::content;
use rocket::State;
Itu #![feature(proc_macro_hygiene, decl_macro)] atribut mengaktifkan fitur eksperimental Rust untuk kerangka kerja Rocket. Itu #[macro_use] atribut mengimpor makro dari roket modul.
Inilah fungsi penangan yang melayani HTML berdasarkan permintaan:
#[get("https://www.makeuseof.com/")]
fn hello_world() -> content::Html<&'static str> {
content::Html("<h1>Hello, world!</h1>")
}
Itu Halo Dunia fungsi mengembalikan string statis HTML dengan isi::html fungsi.
Berikut adalah deklarasi struct konfigurasi untuk server (konvensi framework Rocket):
struct Config {
port: u16,
}#[get("/port")]
fn port(config: State<Config>) -> String {
format!("Server running on port {}", config.port)
}
Saat Anda menjalankan server, Anda dapat membuat permintaan ke /pelabuhan titik akhir untuk status port.
Terakhir, Anda akan membuat instance server dengan menyalakan fungsi. Tambahkan konfigurasi, pasang rute, dan luncurkan server:
fn main() {
let config = Config { port: 8000 }; rocket::ignite()
.manage(config)
.mount("https://www.makeuseof.com/", routes![hello_world, port])
.launch();
}
Itu config variabel adalah turunan dari Konfigurasi struct. Itu menyalakan fungsi memulai instance server, yaitu mengelola metode menambahkan konfigurasi ke server, dan gunung metode memasang fungsi penangan pada rute dasar. Akhirnya, meluncurkan metode meluncurkan server untuk mendengarkan pada port yang ditentukan.
Anda Dapat Membangun Aplikasi Web yang Kuat di Rust Dengan WASM
WebAssembly (WASM) adalah format instruksi biner yang dirancang untuk dieksekusi di browser dan perangkat lain. WASM menyediakan format bytecode tingkat rendah yang dapat digunakan oleh bahasa pemrograman tingkat tinggi seperti Rust sebagai target kompilasi.
Dengan WASM, Anda dapat mengkompilasi kode Rust Anda ke format biner yang dapat dijalankan oleh sebagian besar browser populer. WASM membuka banyak kemungkinan untuk membangun aplikasi web yang kuat di Rust, termasuk aplikasi web full-stack.