actix-web From Zero
Learn one of the fastest Rust web frameworks: the App and HttpServer, routing and extractors, responders, shared state with web::Data, middleware, a full REST API with the ResponseError trait, and testing and production. Mature, batteries-included, and a perennial benchmark leader.
- What actix-web Is & Your First Server actix-web runs your routes across worker threads: an App holds them, an HttpServer runs copies of it, and a handler is an async fn returning a Responder. Install it, write a first server, run it.
- Routing & Extractors How actix-web matches a request to a handler: routes as method + path, builder vs attribute-macro registration, web::scope for versioning, and the Path/Query/Json extractors that turn a request into typed handler arguments.
- Responders How handlers turn into HTTP responses: the Responder trait, the HttpResponse builder for status control, web::Json shorthand, the different-branches type trap, and when to reach for impl Responder.
- Shared State with web::Data How handlers share a database pool or in-memory store via web::Data — and the per-worker closure trap that hands each worker its own copy unless you build state once and clone it in.
- Middleware Middleware wraps your service. Attach it with .wrap(), reach for built-ins like Logger and Compress, master the wrap-order rule, and write your own with from_fn.
- A REST API with Error Handling Build full CRUD over the shared web::Data store, then meet actix's idiomatic error story — the ResponseError trait — so every handler returns Result and varies status without juggling response types.
- Testing & Production Test an actix-web app in memory with actix_web::test (no ports), share routes between main and tests via .configure(), then ship it with workers, built-in graceful shutdown, and env config.
- Where to Go Next You can build, test, and ship a real actix-web API. Now the honest map: actix-web vs axum/Rocket, the data layer (sqlx/SeaORM/Diesel), the Tokio roots, and what to build.