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.
Rust
Rust
Rust
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?
| Özellik | Axum | Actix-web |
| Ekosistem | Tamamen Tokio/Tower tabanlı. | Kendi özel runtime ve asenkron motoru. |
| Öğrenme Eğrisi | Daha 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ı. |
| Performans | Techempower testlerinde Actix'e çok yakın. | Çoğu zaman dünyanın en hızlısı. |