Persediaan Projek
Susun struktur API
Persediaan Projek ialah pelajaran Belajar Pengaturcaraan Rust percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Belajar Pengaturcaraan Rust, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Belajar Pengaturcaraan Rust merangkumi sejumlah 4 pelajaran.
Membina REST API dalam Rust
Dalam kursus ini, anda akan membina REST API kecil dalam Rust. Kami menggunakan rangka kerja web Axum, yang dibina berasaskan Tokio (runtime tak segerak) dan Tower (perisian tengah). Rangka kerja ini mudah digunakan, selamat dari segi jenis, dan digunakan secara meluas dalam persekitaran pengeluaran.
Pelajaran pertama ini menyediakan struktur projek supaya pelajaran seterusnya boleh menambah laluan, model, pangkalan data dan ujian.
Mencipta Projek
Mulakan dengan Cargo. Projek binari menyediakan titik masuk src/main.rs:
cargo new rest_apimencipta folder.cd rest_apimasuk ke dalam folder tersebut.cargo runmembina dan menjalankan projek.
Ini ialah perintah shell dan cargo, bukan petikan Rust yang boleh dijalankan.
// terminal
// cargo new rest_api
// cd rest_api
// cargo runMenambah Kebergantungan
API Axum memerlukan beberapa peti dalam Cargo.toml:
axumuntuk penghalaan dan pengendali.tokiountuk runtime tak segerak.serdeuntuk pensirilan JSON.
// Cargo.toml
// [dependencies]
// axum = "0.7"
// tokio = { version = "1", features = ["full"] }
// serde = { version = "1", features = ["derive"] }
// serde_json = "1"Runtime Tak Segerak
Pelayan web mengendalikan banyak sambungan secara serentak, jadi Axum bersifat tak segerak. Atribut #[tokio::main] menukar main tak segerak menjadi titik masuk sebenar dengan memulakan runtime Tokio. Setiap pengendali boleh menggunakan .await untuk I/O tanpa sekatan.
// src/main.rs
use tokio;
#[tokio::main]
async fn main() {
println!("runtime started");
}Pelayan Minimum
Aplikasi Axum paling kecil membina Router, mengikat pendengar TCP dan menyediakan perkhidmatan. Satu laluan memetakan GET / kepada pengendali yang mengembalikan rentetan. Pengendali hanyalah fungsi tak segerak yang mengembalikan sesuatu yang melaksanakan IntoResponse.
use axum::{routing::get, Router};
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(root));
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000")
.await.unwrap();
axum::serve(listener, app).await.unwrap();
}
async fn root() -> &'static str {
"Hello, API!"
}Cara Penghalaan Berfungsi
Router memetakan laluan dan kaedah HTTP kepada pengendali. Rantaikan panggilan .route(path, method(handler)) untuk mendaftarkan titik akhir. Pembantu kaedah seperti get, post, put dan delete datang daripada axum::routing. Anda boleh menggabungkan kaedah pada laluan yang sama.
use axum::{routing::{get, post}, Router};
async fn list() -> &'static str { "list" }
async fn create() -> &'static str { "created" }
fn build_router() -> Router {
Router::new()
.route("/items", get(list).post(create))
.route("/health", get(|| async { "ok" }))
}Susun Atur Modul yang Disyorkan
Apabila API berkembang, pecahkan kod kepada modul dan bukannya meletakkannya dalam satu main.rs yang besar:
main.rs— permulaan dan pendawaian pelayan.routes.rs— takrif penghala.handlers.rs— pengendali permintaan.models.rs— struktur data.
Pemisahan ini memastikan setiap fail mempunyai fokus dan boleh diuji.
// src/main.rs
mod routes;
mod handlers;
mod models;
#[tokio::main]
async fn main() {
let app = routes::build();
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000")
.await.unwrap();
axum::serve(listener, app).await.unwrap();
}Keadaan Aplikasi Dikongsi
Kebanyakan API memerlukan keadaan yang dikongsi, seperti kumpulan sambungan pangkalan data atau stor dalam memori. Axum menyimpannya dengan .with_state(state) pada penghala. Pengendali menerimanya melalui pengekstrak State. Keadaan tersebut mestilah Clone; bungkus data boleh ubah dalam Arc dan kunci.
use axum::{routing::get, Router, extract::State};
use std::sync::{Arc, Mutex};
type Db = Arc<Mutex<Vec<String>>>;
async fn count(State(db): State<Db>) -> String {
let n = db.lock().unwrap().len();
format!("{} items", n)
}
fn build(db: Db) -> Router {
Router::new().route("/count", get(count)).with_state(db)
}Mengembalikan JSON
Untuk menghantar JSON, bungkus nilai yang boleh disirilkan dalam axum::Json. Apabila Serialize diturunkan melalui serde pada struct anda, Axum menetapkan jenis kandungan dan badan secara automatik.
use axum::Json;
use serde::Serialize;
#[derive(Serialize)]
struct Status {
service: String,
healthy: bool,
}
async fn health() -> Json<Status> {
Json(Status { service: "api".into(), healthy: true })
}Konfigurasi dan Port
Menetapkan port secara terus tidak mengapa untuk demonstrasi, tetapi perkhidmatan sebenar membaca konfigurasi daripada persekitaran. Gunakan std::env::var dengan nilai lalai. Ini membolehkan anda menukar alamat ikatan tanpa menyusun semula, serta berfungsi dengan baik bersama bekas.
use std::env;
async fn main_inner() {
let port = env::var("PORT").unwrap_or_else(|_| "3000".to_string());
let addr = format!("0.0.0.0:{}", port);
println!("binding to {}", addr);
// bind and serve with addr ...
}Menggabungkan Persediaan
Permulaan yang lengkap menyambungkan semuanya: bina penghala dengan laluan dan keadaan yang dikongsi, baca port, ikat pendengar dan sediakan perkhidmatan. Dengan rangka asas ini tersedia, pelajaran seterusnya akan menambah titik akhir, model dan penyimpanan berterusan sebenar.
use axum::{routing::get, Router};
use std::sync::{Arc, Mutex};
#[tokio::main]
async fn main() {
let db = Arc::new(Mutex::new(Vec::<String>::new()));
let app = Router::new()
.route("/health", get(|| async { "ok" }))
.with_state(db);
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000")
.await.unwrap();
axum::serve(listener, app).await.unwrap();
}Semakan Pantas
Uji pemahaman anda tentang persediaan projek.
Ringkasan
Anda telah menyediakan projek REST API Rust:
- Gunakan
cargo newdan tambahkanaxum,tokiosertaserde. #[tokio::main]menyediakan runtime tak segerak.Routermemetakan laluan dan kaedah kepada pengendali tak segerak.- Kongsi data dengan
.with_statedan pengekstrakState. - Pecahkan kod kepada modul laluan, pengendali dan model; baca port daripada persekitaran.
Pelajari Rust dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 39
- Pelajaran
- 144
Soalan Lazim
Adakah pelajaran “Persediaan Projek” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Belajar Pengaturcaraan Rust, termasuk “Persediaan Projek”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Belajar Pengaturcaraan Rust merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Persediaan Projek”?
Susun struktur API Anda berlatih Belajar Pengaturcaraan Rust menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Belajar Pengaturcaraan Rust?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Belajar Pengaturcaraan Rust di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Persediaan Projek” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Belajar Pengaturcaraan Rust ini?
Ya. Setiap pelajaran Belajar Pengaturcaraan Rust menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Persediaan Projek
- Titik Akhir dan Model
- Integrasi Pangkalan Data
- Menguji API