0Pricing
Learn Rust Coding · Pelajaran

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:

  • Path untuk segmen URL, Query untuk string kueri
  • Json untuk isi request (harus berada di bagian terakhir)
  • HeaderMap untuk header
  • Option dan Result menangani 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.

Semua pelajaran dalam kursus ini

  1. Perutean Axum
  2. Extractor
  3. JSON dan State
  4. Middleware
← Kembali ke Learn Rust Coding