Introduction : Pourquoi Rust et pourquoi maintenant ?
\n\nSi vous lisez ce texte, vous connaissez probablement déjà la magie de Rust — ce langage qui offre la vitesse du C++ et la sécurité mémoire, sans nous obliger à nous tirer une balle dans le pied (enfin, presque). En 2025, l'écosystème des frameworks web Rust connaît une véritable renaissance. Nous sommes sortis de l'ère des bibliothèques « brutes » pour entrer dans celle des solutions matures et prêtes pour la production.
\n\nDans cet article, nous ne nous contenterons pas d'énumérer des noms. Nous analyserons les quatre principaux frameworks — Actix-web, Axum, Rocket et Warp — du point de vue d'une utilisation réelle en production. Vous avez un projet personnel à un million de requêtes ou une API d'entreprise ? Allons voir cela.
\n\nCritères de choix : que regarder en 2025 ?
\n\nAvant de plonger dans le code, fixons nos métriques. Ce qui compte pour nous :
\n- \n
- Performances (débit et latence) — Rust ne pardonne pas les frameworks lents. \n
- Ergonomie et DX (Developer Experience) — combien de temps passez-vous sur la configuration plutôt que sur la logique. \n
- Écosystème et support — middleware, bases de données, WebSocket, gRPC. \n
- Communauté et pérennité — commits, issues, mises à jour. \n
1. Actix-web : Le vétéran qui ne lâche rien
\n\nActix-web a longtemps été le roi des benchmarks. Rapide, agressif, il a traversé le drame du départ de son créateur et de son retour. En 2025, c'est un projet stable et mature, soutenu par la communauté.
\n\nAvantages :
\n- \n
- Performances maximales : Actix conserve toujours la première place en RPS (requêtes par seconde). \n
- Écosystème riche : tout est disponible — du WebSocket au SSE. \n
- API stable : peu de changements critiques cette dernière année. \n
Inconvénients :
\n- \n
- Système de traits complexe : les débutants peuvent avoir du mal avec
HttpResponseetHandler. \n - Asynchrone : fonctionne sur son propre
actix_rt, ce qui peut parfois entrer en conflit avec d'autres runtimes. \n
Exemple de code : API REST simple
\nuse actix_web::{web, App, HttpServer, Responder};\n\nasync fn hello() -> impl Responder {\n "Hello from Actix-web 2025!"\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n HttpServer::new(|| {\n App::new()\n .route("/", web::get().to(hello))\n })\n .bind("127.0.0.1:8080")?\n .run()\n .await\n}\n\nVerdict : Choisissez Actix-web si vous devez tirer le maximum de votre matériel et que vous n'avez pas peur de travailler en profondeur avec les types.
\n\n2. Axum : Le choix pragmatique de l'équipe Tokio
\n\nAxum (des créateurs de Tokio et Hyper) est le standard moderne. Il est construit autour de tower (Service), ce qui le rend incroyablement flexible. C'est le framework pour ceux qui veulent « configurer, plutôt que réécrire ».
Avantages :
\n- \n
- Intégration avec l'écosystème Tokio : si vous utilisez
tokio::main, Axum est votre ami. \n - Modularité : les middlewares se connectent comme des couches (layers). \n
- Extractors : travailler avec JSON, Path, Query — c'est basique, mais parfaitement réalisé. \n
Inconvénients :
\n- \n
- Jeunesse : certaines fonctionnalités (comme le WebSocket intégré) nécessitent une configuration manuelle. \n
- Erreurs de compilation complexes : si quelque chose ne va pas avec les traits, le compilateur vous enverra une « brique ». \n
Exemple de code : API JSON avec état
\nuse axum::{\n extract::State,\n routing::get,\n Json, Router,\n};\nuse std::sync::Arc;\n\n#[derive(Clone)]\nstruct AppState {\n counter: Arc<std::sync::atomic::AtomicU64>,\n}\n\nasync fn get_count(State(state): State<AppState>) -> Json<u64> {\n let count = state.counter.fetch_add(1, std::sync::atomic::Ordering::SeqCst);\n Json(count + 1)\n}\n\n#[tokio::main]\nasync fn main() {\n let state = AppState {\n