Pengenalan Axum
Penjelasan
Axum adalah web framework untuk Rust yang dibuat oleh tim Tokio. Berbeda dari framework web lain yang membangun ekosistemnya sendiri dari nol, Axum sengaja dibangun DI ATAS dua pustaka yang sudah matang: Tokio (runtime async) dan Tower (abstraksi middleware/service). Filosofi ini penting dipahami sejak awal — setiap handler di Axum pada dasarnya adalah sebuah `Service` dari Tower, dan setiap middleware adalah `Layer` dari Tower. Konsekuensinya, apa pun yang kompatibel dengan ekosistem Tower (rate limiting, retry, timeout, tracing, load shedding) otomatis bisa dipakai di Axum tanpa perlu ditulis ulang. Dua konsep inti yang akan kamu temui berulang kali di Axum: extractor (cara mengambil data dari request — path, query, header, body) dan `IntoResponse` (cara mengubah nilai apa pun menjadi HTTP response). Kombinasi keduanya membuat handler Axum terasa seperti fungsi biasa: parameter masuk lewat extractor, nilai balik otomatis jadi response. Untuk menjalankan server async, Axum butuh runtime — di sinilah Tokio masuk. Setiap program Axum diawali dengan `#[tokio::main]` di atas fungsi `main`, yang menyulap fungsi `async fn main()` biasa menjadi entry point yang dijalankan di atas runtime Tokio.
Instalasi & Cara Menjalankan
// 1. Buat project baru
// cargo new hello-axum
// cd hello-axum
// 2. Tambahkan dependency lewat cargo add (atau tulis manual di Cargo.toml)
// cargo add axum
// cargo add tokio --features full
// src/main.rs
use axum::{routing::get, Router};
async fn hello() -> &'static str {
"Hello, Axum!"
}
#[tokio::main]
async fn main() {
// Router::new() membuat router kosong, .route() mendaftarkan path + handler
let app = Router::new().route("/", get(hello));
// TcpListener dari Tokio, bukan dari std
let listener = tokio::net::TcpListener::bind("127.0.0.1:3000")
.await
.unwrap();
println!("Server jalan di http://127.0.0.1:3000");
// axum::serve menjalankan server sampai proses dihentikan
axum::serve(listener, app).await.unwrap();
}
// Jalankan dengan: cargo run
// Buka browser ke http://127.0.0.1:3000
Praktikum
Lengkapi kode di bawah supaya handler `about` mengembalikan teks "Ini halaman about" saat diakses lewat path `/about`.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Selalu tambahkan feature `full` pada Tokio saat belajar (`tokio = { version = "1", features = ["full"] }`) supaya kamu tidak pusing memikirkan feature flag mana yang dibutuhkan. Nanti kalau sudah paham, kamu bisa mempersempit feature yang benar-benar dipakai (`rt-multi-thread`, `macros`, `net`) untuk mempercepat waktu kompilasi di production.