Extractor
Mengurai request
Extractor adalah pelajaran Learn Rust Coding gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Learn Rust Coding, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn Rust Coding mencakup 4 pelajaran total.
Apa itu pengekstrak?
Pengekstrak adalah parameter handler yang mengambil bagian dari request untuk Anda. Axum memeriksa tipe parameter dan mengisinya.
- Tidak perlu mengurai request secara manual
- Digerakkan oleh tipe dan dapat dikomposisikan
Pengekstrak Path
Path menangkap segmen URL dinamis. Tipe di dalamnya menentukan cara segmen tersebut diurai.
use axum::extract::Path;
async fn user(Path(id): Path<u32>) -> String {
format!("user {}", id)
}Beberapa parameter jalur
Tangkap beberapa segmen dengan mengekstrak tuple. Urutannya mengikuti pola jalur.
use axum::extract::Path;
async fn item(Path((cat, id)): Path<(String, u32)>) -> String {
format!("{} / {}", cat, id)
}Pengekstrak Query
Query melakukan deserialisasi string kueri URL menjadi struct menggunakan serde. Sangat berguna untuk filter dan paginasi.
use axum::extract::Query;
use serde::Deserialize;
#[derive(Deserialize)]
struct Page { page: u32 }
async fn list(Query(p): Query<Page>) -> String {
format!("page {}", p.page)
}Pengekstrak isi JSON
Json melakukan deserialisasi isi request menjadi struct. Struct tersebut harus menurunkan Deserialize.
use axum::Json;
use serde::Deserialize;
#[derive(Deserialize)]
struct NewUser { name: String }
async fn create(Json(u): Json<NewUser>) -> String {
format!("created {}", u.name)
}Pengekstrak Header
Akses header dengan pengekstrak HeaderMap atau pengekstrak header bertipe. Berguna untuk token autentikasi.
use axum::http::HeaderMap;
async fn show(headers: HeaderMap) -> String {
match headers.get("x-api-key") {
Some(v) => format!("key: {:?}", v),
None => "no key".to_string(),
}
}Urutan pengekstrak penting
Pengekstrak yang mengonsumsi isi seperti Json harus berada di bagian terakhir dalam daftar parameter, karena isi hanya dapat dibaca sekali.
use axum::{Json, extract::Path};
use serde::Deserialize;
#[derive(Deserialize)]
struct Body { value: i32 }
async fn h(Path(id): Path<u32>, Json(b): Json<Body>) -> String {
format!("{} {}", id, b.value)
}Memodelkan ekstraksi dalam Rust biasa
Ekstraksi hanyalah penguraian data bertipe dari request. Di sini kita melakukan deserialisasi string seperti kueri menjadi angka.
fn parse_query(q: &str) -> Option<u32> {
q.strip_prefix("page=")?.parse().ok()
}
fn main() {
println!("{:?}", parse_query("page=3"));
println!("{:?}", parse_query("bad"));
}Ekstraksi opsional
Bungkus pengekstrak dengan Option agar kegagalannya tidak menghentikan proses. Nilai yang hilang atau tidak valid menghasilkan None, bukan respons kesalahan.
use axum::extract::Query;
use serde::Deserialize;
#[derive(Deserialize)]
struct Filter { q: String }
async fn search(filter: Option<Query<Filter>>) -> String {
match filter {
Some(Query(f)) => f.q,
None => "no filter".to_string(),
}
}Penolakan
Saat pengekstrak gagal, pengekstrak tersebut mengembalikan penolakan yang menjadi respons kesalahan HTTP. Misalnya, JSON yang tidak valid otomatis menghasilkan 422.
use axum::extract::rejection::JsonRejection;
use axum::Json;
async fn create(body: Result<Json<i32>, JsonRejection>) -> String {
match body {
Ok(Json(n)) => format!("ok {}", n),
Err(_) => "bad body".to_string(),
}
}Menggabungkan pengekstrak
Handler dapat menggunakan banyak pengekstrak sekaligus. Axum mengisi masing-masing dari bagian request yang sesuai.
use axum::{Json, extract::{Path, Query}};
use serde::Deserialize;
#[derive(Deserialize)]
struct Q { sort: String }
#[derive(Deserialize)]
struct B { name: String }
async fn h(Path(id): Path<u32>, Query(q): Query<Q>, Json(b): Json<B>) -> String {
format!("{} {} {}", id, q.sort, b.name)
}Pemeriksaan Singkat
Uji pemahaman Anda tentang pengekstrak.
Rangkuman
Anda telah mempelajari cara mengurai request dengan pengekstrak:
Pathuntuk segmen URL,Queryuntuk string kueriJsonuntuk isi request (harus berada di bagian terakhir)HeaderMapuntuk headerOptiondanResultmenangani kegagalan dengan baik
Selanjutnya: state bersama dan respons JSON.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Extractor” gratis?
Ya — teks lengkap “Extractor” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn Rust Coding, upgrade ke CoddyKit PRO. Kursus Learn Rust Coding mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Extractor”?
Mengurai request Kamu berlatih Learn Rust Coding dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Learn Rust Coding?
Tidak diperlukan pengalaman sebelumnya. Learn Rust Coding di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Extractor” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Learn Rust Coding ini?
Ya. Setiap pelajaran Learn Rust Coding menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.