Axum: Modern ve Tip Güvenli Web Geliştirme

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Rust ekosisteminin en hızlı yükselen ve günümüzde çoğu geliştirici tarafından "varsayılan" seçim haline gelen web framework'ü Axum'dur. Axum, bizzat Tokio ekibi tarafından geliştirilmiştir ve Rust'ın asenkron ekosistemiyle %100 uyumludur.
Axum'u diğerlerinden ayıran en büyük özellik, makro kullanmak yerine Rust'ın güçlü tip sisteminden (traits) yararlanmasıdır.

1. Axum'un Felsefesi: Tower Üzerine İnşa​

Axum, sadece bir web framework'ü değildir; arkasında devasa bir ekosistem olan Tower yapısını kullanır. Tower; istekleri alan, işleyen ve yanıt dönen servisler için standart bir protokoldür. Bu sayede Axum; loglama, hata yönetimi ve kimlik doğrulama gibi özellikleri hazır Tower katmanlarından (layer) ödünç alabilir.

2. Temel Yapı: Router ve Handler​

Axum'da route tanımlamak çok yalındır. #[get("/")] gibi makrolar yerine, fonksiyonel bir zincirleme (chaining) yapısı kullanılır.
Rust
Kod:
use axum::{routing::get, Router};

#[tokio::main]
async fn main() {
    // Rotaları tanımlıyoruz
    let app = Router::new().route("/", get(merhaba_dunya));

    // Sunucuyu başlatıyoruz
    let listener = tokio::net::TcpListener::bind("127.0.0.1:3000").await.unwrap();
    axum::serve(listener, app).await.unwrap();
}

async fn merhaba_dunya() -> &'static str {
    "Merhaba Axum!"
}

3. Güçlü Extractors (Ayıklayıcılar)​

Axum'un en "sihirli" tarafı, handler fonksiyonlarının parametreleridir. Bir fonksiyonun parametresine ne yazarsanız, Axum o veriyi isteğin içinden otomatik olarak çekip getirir. Buna "FromRequest" sistemi denir.
Rust
Kod:
use axum::{extract::Path, Json};
use serde::Deserialize;

#[derive(Deserialize)]
struct Kullanici {
    ad: String,
}

// URL'den ID'yi, gövdeden JSON verisini otomatik ayıklar
async fn guncelle(Path(id): Path<u32>, Json(kullanici): Json<Kullanici>) {
    println!("ID: {} olan kullanıcı adı {} olarak güncellendi.", id, kullanici.ad);
}

4. State Management: Veri Paylaşımı​

Veritabanı bağlantı havuzlarını paylaşmak Axum'da çok güvenlidir. State yapısı sayesinde tip güvenliği korunur; yani yanlış tipte bir state çekmeye çalışırsanız kodunuz derlenmez.
Rust
Kod:
#[derive(Clone)]
struct AppState {
    db_baglantisi: String,
}

// Router'a state ekleme
let app = Router::new()
    .route("/db", get(db_oku))
    .with_state(paylasilan_state);

5. Axum vs Actix-web: Hangisini Seçmeli?​

ÖzellikAxumActix-web
EkosistemTamamen Tokio/Tower tabanlı.Kendi özel runtime ve asenkron motoru.
Öğrenme EğrisiDaha dik (Trait mantığına hakimiyet ister).Daha kolay (Makrolar işleri basitleştirir).
EsneklikÇok yüksek; Tower katmanları her yerde çalışır.Kendi içinde çok tutarlı ama daha kapalı.
PerformansTechempower testlerinde Actix'e çok yakın.Çoğu zaman dünyanın en hızlısı.
 
Geri
Üst