การกำหนดเส้นทางด้วย Axum
ตัวจัดการและเส้นทาง
การกำหนดเส้นทางด้วย Axum เป็นบทเรียน Learn Rust Coding ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn Rust Coding และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน
Axum คืออะไร
Axum คือเฟรมเวิร์กเว็บแบบอะซิงโครนัสที่ใช้งานสะดวกจากทีม Tokio โดยสร้างต่อยอดจาก tower และ hyper
- ตัวจัดการคือฟังก์ชันอะซิงโครนัสธรรมดา
- การกำหนดเส้นทางขับเคลื่อนด้วยชนิดข้อมูลและนำมาประกอบกันได้
- ทำงานบนรันไทม์ Tokio
ตัวจัดการคือฟังก์ชัน
ตัวจัดการของ Axum คือฟังก์ชันอะซิงโครนัสที่คืนค่าซึ่งแปลงเป็นการตอบกลับได้ เช่น &str หรือ String
async fn hello() -> &'static str {
"Hello, world!"
}การสร้าง Router
Router จับคู่เส้นทางกับตัวจัดการ ใช้ route ร่วมกับตัวกรองเมธอด HTTP เช่น get
use axum::{Router, routing::get};
async fn hello() -> &'static str { "Hello" }
fn app() -> Router {
Router::new().route("/", get(hello))
}การเริ่มเซิร์ฟเวอร์
ผูกตัวรับ TCP แล้วให้บริการ Router มาโคร #[tokio::main] จะตั้งค่ารันไทม์อะซิงโครนัส
use axum::{Router, routing::get};
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(|| async { "Hi" }));
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}หลายเส้นทาง
เรียกใช้ route ต่อกันเพื่อขึ้นทะเบียนจุดปลายทางหลายรายการบน Router เดียว
use axum::{Router, routing::get};
fn app() -> Router {
Router::new()
.route("/", get(|| async { "home" }))
.route("/about", get(|| async { "about" }))
}เมธอด HTTP ที่แตกต่างกัน
รวมตัวจัดการเมธอดหลายตัวบนเส้นทางเดียวด้วย get(...).post(...) แต่ละเมธอดจะส่งต่อไปยังตัวจัดการของตนเอง
use axum::{Router, routing::get};
fn app() -> Router {
Router::new().route(
"/items",
get(|| async { "list" }).post(|| async { "create" }),
)
}พารามิเตอร์เส้นทาง
จับส่วนต่าง ๆ ของ URL ด้วยเซกเมนต์ {name} แล้วอ่านค่าผ่านตัวดึงข้อมูล Path
use axum::extract::Path;
async fn show(Path(id): Path<u32>) -> String {
format!("item {}", id)
}การสร้างแบบจำลองการกำหนดเส้นทางใน Rust ธรรมดา
โดยแก่นแล้ว การกำหนดเส้นทางคือการจับคู่เส้นทางกับการตอบกลับ แบบจำลองที่รันได้นี้แสดงแนวคิดดังกล่าวโดยไม่ใช้เฟรมเวิร์ก
fn route(path: &str) -> &str {
match path {
"/" => "home",
"/about" => "about page",
_ => "404 not found",
}
}
fn main() {
println!("{}", route("/"));
println!("{}", route("/about"));
println!("{}", route("/missing"));
}การซ้อน Router
ประกอบแอปที่มีขนาดใหญ่ขึ้นโดยติดตั้ง Router ย่อยไว้ใต้คำนำหน้าด้วย nest
use axum::{Router, routing::get};
fn api() -> Router {
Router::new().route("/users", get(|| async { "users" }))
}
fn app() -> Router {
Router::new().nest("/api", api())
}ตัวจัดการสำรอง
กำหนดสิ่งที่จะเกิดขึ้นกับเส้นทางที่ไม่ตรงกันด้วย fallback เหมาะอย่างยิ่งสำหรับหน้า 404 แบบกำหนดเอง
use axum::{Router, http::StatusCode};
async fn not_found() -> (StatusCode, &'static str) {
(StatusCode::NOT_FOUND, "nothing here")
}
fn app() -> Router {
Router::new().fallback(not_found)
}การคืนรหัสสถานะ
ตัวจัดการสามารถคืนทูเพิลของ (StatusCode, body) เพื่อควบคุมสถานะการตอบกลับได้อย่างแม่นยำ
use axum::http::StatusCode;
async fn create() -> (StatusCode, &'static str) {
(StatusCode::CREATED, "created")
}ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับการกำหนดเส้นทางของ Axum
ทบทวน
คุณได้เรียนรู้พื้นฐานการกำหนดเส้นทางของ Axum แล้ว:
- ตัวจัดการคือฟังก์ชันอะซิงโครนัสที่คืนการตอบกลับ
Router::new().route(path, get(handler))ใช้ขึ้นทะเบียนจุดปลายทางPathจับเซกเมนต์ของ URLnest,fallbackและทูเพิลสถานะช่วยกำหนดรูปแบบของแอป
ถัดไป: ตัวดึงข้อมูลจะแยกวิเคราะห์คำขอขาเข้า
คำถามที่พบบ่อย
บทเรียน “การกำหนดเส้นทางด้วย Axum” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การกำหนดเส้นทางด้วย Axum” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn Rust Coding ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดเส้นทางด้วย Axum”
ตัวจัดการและเส้นทาง คุณปฏิบัติ Learn Rust Coding ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn Rust Coding หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn Rust Coding บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การกำหนดเส้นทางด้วย Axum” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn Rust Coding นี้ได้ไหม
ได้ บทเรียน Learn Rust Coding ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดเส้นทางด้วย Axum
- ตัวดึงข้อมูล
- JSON และสถานะ
- มิดเดิลแวร์