Le clone() ne vous jouera plus de tour : voici comment l'utiliser
Rust + Actix-web : Des APIs ultra-rapides qui tiennent la charge
Avoue-le : quand tu dois sortir une API REST rapidement, tu choisis Node.js ou Python. On connaît tous le compromis. D'un côté, la vitesse de développement. De l'autre, les perfs.
Mais si je te disais qu'on peut avoir les deux ?
C'est exactement ce que propose Rust, et Actix-web rend ça accessible aux développeurs web.
Pourquoi Rust pour tes APIs ? (La vérité qu'on évite)
Avant de taper la moindre ligne de code, parlons argent : Rust, c'est costaud à apprendre. Le borrow checker va te的人格iser. Tu vas passer des heures sur des lifetimes au lieu de livrer des features.
Ce qui m'a convaincu ? Rust ne te force pas à choisir entre sécurité et performance. Ton API est safe par défaut. Pas d'exception null pointer. Pas de data race. Pas de pause garbage collection qui explose tes latences p99. Quand tu sers des milliers de requêtes par seconde, cette régularité, ça change tout.
Pour les startups ou les devs qui montent en charge, ça veut dire des performances prévisibles sans avoir à gérer une couche de sécurité supplémentaire côté opérationnel.
Premiers pas avec Actix-web
Actix-web s'inspire du framework Elixir/Phoenix (sans lien officiel). Il adopte le modèle actor et propose une API ergonomique. Si tu as touché à Express ou Fastify, tu vas vite t'y retrouver.
Préparer ton projet
cargo new rust-api-demo
cd rust-api-demo
cargo add actix-web actix-rt
Ton premier endpoint
use actix_web::{web, App, HttpServer, HttpResponse};
async fn health_check() -> HttpResponse {
HttpResponse::Ok().json(serde_json::json!({
"status": "healthy",
"version": env!("CARGO_PKG_VERSION")
}))
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.route("/health", web::get().to(health_check))
})
.bind("127.0.0.1:8080")?
.run()
.await
}
Ce health check ? Il compile en millisecondes et démarre en microsecondes. Lance cargo run, tape localhost:8080/health dans ton navigateur. Ta réponse JSON apparaît instantanément.
Construire une vraie API : Todos avec opérations CRUD
Passons à quelque chose de plus concret. Une API Todo avec toutes les opérations CRUD.
Définir ton modèle de données
use serde::{Deserialize, Serialize};
use std::sync::Mutex;
use std::cell::Cell;
#[derive(Clone, Serialize, Deserialize)]
struct Todo {
id: u64,