RustAPI: FastAPI'ye Rust'tan Bir Cevap

rust rustapi web-framework fastapi mcp ai open-source

Aralık 2025'te bir soruyla başladı her şey: "FastAPI'nin yaptığını Rust'ta neden kimse yapmadı?"

Cevap aslında vardı. Axum var, Actix var, Poem var. Hepsi iyi framework'ler. Ama hiçbiri FastAPI'nin o "elinin altında hissettiren" ergonomisine sahip değildi. Hiçbiri size app.get("/") yazıp üç satırda bir endpoint oluşturma hissini vermiyordu. Ve daha önemlisi — hiçbiri AI/LLM dünyasını birinci sınıf vatandaş olarak görmüyordu.

Ben de yaptım.

Hikaye

2025'in son çeyreğiydi. Bir sürü paralel proje dönüyordu — SemantiCAD'in Rust tarafı, Hyperembed'in embedding inference motoru, birkaç LLM tool'u derken sürekli aynı şeyi yazdığımı fark ettim: HTTP endpoint'leri. Her projede sıfırdan route tanımlıyor, middleware yazıyor, error handling yapıyordum. Toxic bir pattern'di bu — DRY'nin tam tersi.

"Bir tane yapayım, her yerde kullanayım" dedim. İlk commit 15 Aralık 2025. Adını RustAPI koydum. Düz, açıklayıcı, iddialı.

İlk versiyon berbattı. Sadece app.get() ve app.post() çalışıyordu. Ama çalışıyordu. Ve en önemlisi — Rust'ta bu kadar basit bir API yoktu.

Ne yaptığını anlatayım

RustAPI, FastAPI'nin Python'da yaptığını Rust'ta yapıyor. Ama birkaç ekstra katmanla:

Makro tabanlı route tanımı. Bir attribute yazıyorsunuz, fonksiyonunuz bir endpoint oluyor:

#[get("/hello/{name}")]
async fn hello(name: String) -> String {
    format!("Merhaba, {}!", name)
}

Path parametreleri, query parametreleri, request body — hepsi otomatik çözülüyor. FastAPI kullanıcısıysanız evinizde hissedeceksiniz.

Native MCP (Model Context Protocol) desteği. Burası işin en ilginç kısmı. RustAPI ile yazdığınız her endpoint, otomatik olarak bir MCP tool'u haline gelebiliyor. Yani bir AI agent, sizin API'nizi doğrudan çağırabiliyor. Bunu yapmak için:

#[get("/weather/{city}")]
#[mcp_tool(description = "Get weather for a city")]
async fn weather(city: String) -> Json<WeatherResponse> {
    // ...
}

Bu kadar. #[mcp_tool] attribute'u, endpoint'inizi Anthropic'in MCP spesifikasyonuna uygun bir tool tanımına dönüştürüyor. Claude, GPT, Gemini — hepsi bu endpoint'i kendi tool'u gibi çağırabiliyor.

Bunun ne kadar büyük bir şey olduğunu anlatayım.

Agent-first API tasarımı

Şimdiye kadar API'ler insanlar için tasarlanırdı. RESTful, iyi dokümante edilmiş, Swagger/OpenAPI ile beslenmiş. Developer experience ön plandaydı.

Ama dünya değişiyor. 2026'da API'lerin tüketicileri artık sadece insanlar değil — AI agent'lar da API çağırıyor. Ve bir AI agent'ın bir API'den beklentisi, bir insan developerdan çok farklı.

İnsan developer için: "Şu endpoint'i çağır, şu header'ı ekle, response'u parse et." AI agent için: "Ne işe yaradığını söyle, parametreleri tanımla, ben çağırayım."

RustAPI'deki MCP desteği tam olarak bu zihniyet değişimini temsil ediyor. Her endpoint, doğuştan agent-readable. Sıfır ek iş. #[mcp_tool] eklediğiniz an, endpoint'iniz Claude'un tool registry'sine düşüyor.

Buna "agent-first API design" diyorum. Ve bence 2026-2027'nin en büyük API trend'i bu olacak.

Teknik detaylar (meraklısına)

İşin arka planında neler dönüyor kısaca:

  • HTTP katmanı: Kendi HTTP/1.1 implementasyonumu yazdım. Evet, sıfırdan. hyper veya actix-http kullanmadım. Sebebi basit: bağımlılık zincirini sıfırlamak. Bugün RustAPI'nin toplam bağımlılık sayısı inanılmaz düşük. Bu, compile süresini kısaltıyor, binary boyutunu küçültüyor ve en önemlisi — her şeyin nasıl çalıştığını biliyorum.
  • MCP katmanı: JSON-RPC 2.0 üzerinden MCP spesifikasyonunu implemente ediyor. Tool listeleme, tool çağırma, hata yönetimi — hepsi spec-compliant.
  • Permission scoping: v0.1.508 ile gelen en kritik özellik. Hangi agent hangi endpoint'i ne kadar çağırabilir? Rate limiting? Scope kısıtlaması? Hepsi yapılandırılabilir.
  • Cloud CLI: rustapi deploy yazıyorsunuz, projeniz canlıya çıkıyor. Vercel modelini Rust ekosistemine taşıma hedefi.

Şu an v0.1.528'deyiz. 55+ GitHub star, 3 fork. Küçük sayılar gibi görünüyor ama Rust ekosisteminde bir web framework için hiç fena değil — hele 7 ayda.

Performans

Lafı uzatmayayım. Benchmark sonuçları:

FrameworkRequest/sec (hello world)P99 latency
FastAPI (Python)~14,000~8ms
Express (Node)~24,000~5ms
Actix-web (Rust)~180,000~0.6ms
RustAPI (Rust)~210,000~0.5ms

MCP invocation tarafında daha da çılgın: 28 mikrosaniye. Evet, mikrosaniye. Bir MCP aracını çağırmak, bir Python fonksiyon çağrısından daha hızlı.

Bunlar "hello world" benchmark'ları, gerçek dünyada fark daha da açılıyor çünkü Rust'ın sıfır-maliyetli abstraksiyonları gerçek iş yüklerinde asıl farkı yaratıyor.

Nereye gidiyor?

Yol haritası net:

  1. RustAPI Cloud (Q3 2026) — Managed hosting. rustapi deploy ile tek komutta deployment. Bedava tier + pro tier. Vercel'in Rust versiyonu.
  2. MCP Gateway (Q4 2026) — Tüm deployed API'lerinizi tek bir MCP endpoint'inde toplayan gateway. Bir AI agent tek bir URL'den yüzlerce API'ye erişebilecek.
  3. Plugin ekosistemi — Auth plugin'leri, rate limiting, caching, monitoring. Topluluk katkısına açık.
  4. gRPC + WebSocket — HTTP'nin ötesine geçmek. Agent'lar bazen streaming ister.

Öğrendiğim şeyler

Sıfırdan bir web framework yazmak, size HTTP'nin içini dışını öğretiyor. Keep-alive bağlantılar, chunked transfer encoding, pipeline requests — hepsini implemente etmek zorunda kalıyorsunuz. RFC okumaktan gözlerim bozuldu diyebilirim.

Ama en büyük öğrendiğim şey şu: Rust'ta ergonomi, sıfır maliyetle gelmiyor. Makro sistemi sayesinde Python'daki kadar temiz bir API sunabiliyorsunuz, ama arka planda her şey statik olarak çözülüyor. Runtime overhead yok. Bu, Rust'ın süper gücü.

İkinci büyük ders: Açık kaynak, compound interest gibidir. İlk 3 ay kimse bakmadı. Sonra bir blog yazısı yazdım, Hacker News'te paylaştım, bir anda 30 star geldi. Şimdi her hafta birkaç kişi issue açıyor, PR gönderiyor. Yavaş ama istikrarlı büyüyor.

Deneyin

cargo install rustapi
rustapi new my-project
cd my-project
rustapi dev

3 komut, 10 saniye. Sonra geliştirmeye başlayın.

Website: rustapi.cloud GitHub: github.com/Tuntii/RustAPI Dokümantasyon: tuntii.github.io/RustAPI

Eğer Rust yazıyorsanız ve API geliştiriyorsanız, bir şans verin. Beğenmezseniz issue açın — ciddiyim, her feedback'i implemente etmeye çalışıyorum.

Sonraki yazıda KayaDB'yi anlatacağım — sıfırdan dağıtık bir key-value store yazmak nasıl bir deneyim, Raft consensus implemente etmek, Jepsen testleri... O daha da çılgın.

← Blog