Bunu Neden İnşa Ettim?
"Geleneksel Rust OpenAPI sandıkları (utoipa vb.) kod tabanını gereksiz trait implementasyonları ve makro parametreleriyle şişirir. Geliştirme sürecindeki bu sürtünmeyi tamamen ortadan kaldırmak için, 'inventory' sandığını kullanarak dağıtık (distributed) tip ve route kayıtlarını compile-time'da toplayan, Actix-Web'e native entegre olan kendi AST-parsing makro motorumu yazdım. Projeyi açık kaynaklı bir kütüphane olarak crates.io'da yayınladım, böylece diğer mühendisler tek bir bağımlılık (dependency) ekleyerek kendi Swagger UI arayüzlerini anında ayağa kaldırabiliyorlar."
Mimari & Kararlar
Çekirdek mimari, `syn` ve `quote` kullanarak Rust AST'sini (Abstract Syntax Tree) doğrudan parse eden bir `proc-macro` katmanıdır. `#[register_api]` ve `#[derive(ApiSchema)]` makroları, uç nokta (route) ve struct verilerini `inventory::submit!` üzerinden global bir statik memory alanına kaydeder. Çalışma zamanında (runtime) Actix-Web ayağa kalkarken `ApiRegistry::new()`, bellekteki tüm meta veriyi toplar ve hiyerarşik bir OpenAPI 3.0.0 JSON nesnesine derler. Sunum katmanı, SwaggerUIBundle'ı çağıran ve çalışma zamanında özel bir React plugini (`TabbedResponsesPlugin`) ile DOM'u modifiye eden gömülü (embedded) bir HTML payload'ı olarak tasarlanmıştır.
Temel Özellikler
- 01.Cargo üzerinden drop-in bağımlılık (dependency) olarak eklenebilen izole edilmiş kütüphane yapısı
- 02.İç içe geçmiş Rust jenerikleri için (Option, Vec, Uuid, DateTime) recursive AST tip çözümlemesi ve OpenAPI şema haritalaması
- 03.`inventory` modülü üzerinden dağıtık, merkezi bir kayıt defterine ihtiyaç duymayan otonom route/schema enjeksiyonu
- 04.Actix-Web `web::ServiceConfig` mimarisine tek satırlık (plug-and-play) entegrasyon
- 05.Swagger UI'ın React bileşen ağacına (component tree) doğrudan müdahale eden özel Tabbed HTTP Status eklentisi