Extracteurs
Analyser les requêtes
Extracteurs est une leçon Learn Rust Coding gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Learn Rust Coding, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Learn Rust Coding comprend 4 leçons au total.
Qu’est-ce qu’un extracteur ?
Un extracteur est un paramètre de gestionnaire qui récupère pour vous une partie de la requête. Axum examine les types des paramètres et les remplit.
- Aucune analyse manuelle de la requête
- Approche guidée par les types et composable
Extracteur de chemin
Path capture les segments dynamiques de l’URL. Le type placé à l’intérieur détermine la manière dont le segment est analysé.
use axum::extract::Path;
async fn user(Path(id): Path<u32>) -> String {
format!("user {}", id)
}Plusieurs paramètres de chemin
Capturez plusieurs segments en extrayant un tuple. L’ordre correspond au modèle du chemin.
use axum::extract::Path;
async fn item(Path((cat, id)): Path<(String, u32)>) -> String {
format!("{} / {}", cat, id)
}Extracteur de requête
Query désérialise la chaîne de requête de l’URL en une structure à l’aide de serde. C’est très pratique pour les filtres et la pagination.
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)
}Extracteur de corps JSON
Json désérialise le corps d’une requête en une structure. La structure doit dériver de 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)
}Extracteur d’en-têtes
Accédez aux en-têtes avec l’extracteur HeaderMap ou avec des extracteurs d’en-têtes typés. C’est utile pour les jetons d’authentification.
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(),
}
}L’ordre des extracteurs est important
Les extracteurs qui consomment le corps, comme Json, doivent apparaître en dernier dans la liste des paramètres, car le corps ne peut être lu qu’une seule fois.
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)
}Modéliser l’extraction en Rust simple
L’extraction consiste simplement à analyser des données typées dans une requête. Ici, nous désérialisons une chaîne semblable à une requête en nombres.
fn parse_query(q: &str) -> Option<u32> {
q.strip_prefix("page=")?.parse().ok()
}
fn main() {
println!("{:?}", parse_query("page=3"));
println!("{:?}", parse_query("bad"));
}Extraction facultative
Enveloppez un extracteur dans Option pour éviter qu’il ne provoque une erreur fatale. Une valeur absente ou incorrecte produit None plutôt qu’une réponse d’erreur.
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(),
}
}Rejets
Lorsqu’un extracteur échoue, il renvoie un rejet qui devient une réponse d’erreur HTTP. Par exemple, un JSON incorrect produit automatiquement une erreur 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(),
}
}Combiner des extracteurs
Un gestionnaire peut utiliser plusieurs extracteurs à la fois. Axum remplit chacun d’eux à partir de la partie correspondante de la requête.
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)
}Vérification rapide
Vérifiez votre compréhension des extracteurs.
Récapitulatif
Vous avez appris à analyser les requêtes avec des extracteurs :
Pathpour les segments d’URL,Querypour la chaîne de requêteJsonpour le corps, et il doit être placé en dernierHeaderMappour les en-têtesOptionetResultgèrent les échecs avec élégance
Ensuite : l’état partagé et les réponses JSON.
Questions Fréquemment Posées
La leçon « Extracteurs » est-elle gratuite ?
Oui — le texte complet de « Extracteurs » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Learn Rust Coding, passe à CoddyKit PRO. Le cours Learn Rust Coding comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Extracteurs » ?
Analyser les requêtes Tu pratiques Learn Rust Coding avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Learn Rust Coding ?
Aucune expérience préalable n'est requise. Learn Rust Coding sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Extracteurs » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Learn Rust Coding ?
Oui. Chaque leçon Learn Rust Coding inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Routage avec Axum
- Extracteurs
- JSON et état
- Intergiciel