Backend Geliştirme
Açık Kaynak

Ferivonus Swagger Gen: Zero-Boilerplate OpenAPI Macro Engine

RustJavaScriptHTMLCSSActix-WebReact (Injected)Swagger UIsynquoteproc-macroinventoryserdeCargo

Actix-Web için geliştirilmiş, compile-time procedural macro'larla donatılmış ve doğrudan Cargo (crates.io) üzerinden dağıtılan sıfır-boilerplate (zero-boilerplate) OpenAPI 3.0.0 jeneratörü.

Teknoloji Yığını

RustJavaScriptHTMLCSSActix-WebReact (Injected)Swagger UIsynquoteproc-macroinventoryserdeCargo

Sistem Metrikleri

Makro genişletmeleri (macro expansions) tamamen compile-time'da gerçekleştiği için çalışma zamanında reflection kaynaklı sıfır overhead (zero overhead)
JSON şema ağacının yalnızca sunucu başlatılırken bir kez oluşturulup Mutex içinde cache'lenmesi sayesinde istek (request) başına parsing maliyeti ortadan kalkar
Arayüz (UI) ve dokümantasyon payload'ları statik olarak binary içerisine gömülmüştür, bu sayede disk I/O darboğazları önlenir

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
Bu araç, kod dokümantasyonu yükünü tamamen ortadan kaldıran agresif bir otomasyon katmanıdır. Crates.io üzerinden yayınlanmış olması, endüstri standardı bir dağıtım boru hattını (distribution pipeline) işaret eder. Geliştirilen AST parser mekanizması; `Vec<Option<Uuid>>` gibi kompleks ve iç içe geçmiş türleri recursive (öz yinelemeli) olarak çözümleyip, hatasız bir şekilde OpenAPI `$ref` şemalarına çevirebilir. `proc-macro` destekli bu katı parsing mimarisi, manuel oluşturulan DTO (Data Transfer Object) dokümantasyonlarındaki insan hatalarını yok eder ve Rust'ın güçlü tip sistemi ile dışarıya açılan API kontratı arasında mutlak senkronizasyon sağlar.