body.title.clone() avslöjad: Så duplicerar du element som ett proffs

body.title.clone() avslöjad: Så duplicerar du element som ett proffs

Jun 23, 2026 rust actix-web rest-api web-development performance backend devops programming-languages

Rust + Actix-web: Bygg blixtsnabba API:er som faktiskt håller måttet

Låt mig vara ärlig—de flesta av oss grabbar efter Node.js eller Python när vi behöver ett snabbt REST API. Vi känner till avvägningarna: utvecklarhastighet mot prestanda, snabb prototyp mot produktionsklar pålitlighet. Men vad om du kunde få båda?

Det är löftet med Rust, och Actix-web är ramverket som gör det tillgängligt för webbutvecklare.

Varför Rust för API:er? (Den obekväma sanningen)

Innan vi skriver en enda rad kod, låt oss ta tjuren vid hornen: Rust har en inlärningströskel. Den är inte skonsam. Borrow checkern kommer att få dig på fall. Du kommer att spendera timmar på att felsöka lifetimes istället för att leverera features.

Men här är grejen som klickade för mig: Rust tvingar dig inte att välja mellan säkerhet och hastighet. Ditt API blir minnessäkert per default—inga null pointer exceptions, inga data races, ingen garbage collection som saboterar dina p99-latenser. När du betjänar tusentals requests per sekund, spelar den förutsägbarheten roll.

För startups och utvecklare som skalar system handlar det om förutsägbar prestanda utan den operativa bördan av att hantera ett separat säkerhetslager.

Kom igång med Actix-web

Actix-web är inspirerat av (men ej anslutet till) Elixir/Phoenix-ramverket. Det omfamnar actor-modellen och levererar ett ergonomiskt API som känns bekant om du har använt Express, Fastify eller liknande verktyg.

Sätt upp ditt projekt

cargo new rust-api-demo
cd rust-api-demo
cargo add actix-web actix-rt

Din första 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
}

Den där health-endpointen? Den kompilerar på millisekunder och startar på mikrosekunder. Kör cargo run och slå localhost:8080/health—du får din JSON-response direkt.

Bygg ett riktigt API: Todos med CRUD-operationer

Låt oss bygga något mer praktiskt—ett Todo API med fullständiga CRUD-operationer.

Definiera din datamodell

use serde::{Deserialize, Serialize};
use std::sync::Mutex;
use std::cell::Cell;

#[derive(Clone, Serialize, Deserialize)]
struct Todo {
    id: u64,
    title: String,
    completed: bool,
}

Implementera CRUD-logiken

// Hämta alla todos
async fn get_todos(data: web::Data<Mutex<Vec<Todo>>>) -> HttpResponse {
    let todos = data.lock().unwrap();
    HttpResponse::Ok().json(&*todos)
}

// Skapa ny todo
async fn create_todo(
    data: web::Data<Mutex<Vec<Todo>>>,
    body: web::Json<Todo>,
) -> HttpResponse {
    let mut todos = data.lock().unwrap();
    todos.push(body.into_inner());
    HttpResponse::Created().json("Created")
}

Wrapping up

Det är inte överdrift att säga att Actix-web levererar. Rusts minnesmodell kombinerat med ett ramverk byggt för prestanda ger dig ett fundament som inte kompromissar. Visst finns det en initial kostnad i att lära sig Rust—men för API:er som förväntas skala är den investeringen värd varje timme du lägger ner.

Börja smått. En health endpoint. En datamodell. Sedan bygger du vidare därifrån.

Read in other languages:

RU BG EL CS UZ TR FI RO PT PL NB NL HU IT FR ES DE DA ZH-HANS EN