İçeriğe geç
Tüm projeler
AraçlarAçık kaynak

Easy-DB: Dinamik REST API & SQLite Otomasyon Kütüphanesi

SQLite tablolarını anında güvenli bir REST API'ye dönüştüren ve kendi asenkron HTTP istemcisini (client) içinde barındıran, crates.io üzerinden dağıtılan sıfır-boilerplate Rust kütüphanesi.

Teknoloji yığını

Diller
Çatılar & kütüphaneler

Performans & metrikler

  • Ağır ORM'ler (örn. Diesel/SeaORM) yerine doğrudan raw query mapping kullanılarak bellek tahsisi (memory footprint) minimize edildi
  • Tokio'nun asenkron event-loop'u sayesinde thread bloklanması yaşamadan yüksek eşzamanlı (concurrent) HTTP isteği işleme kapasitesi
  • Veritabanının doğrudan disk üzerinde (embedded) çalışmasıyla elde edilen sıfır ağ gecikmeli (zero-network-latency) sorgu süreleri

Neden geliştirdim?

Backend geliştirirken sürekli tekrarlayan CRUD endpoint'leri ve DTO boilerplate'leri yazmak ciddi bir zaman kaybı. Bu sürtünmeyi ortadan kaldırmak için, sadece tablo yapısını verip anında güvenli bir REST API ayağa kaldıran, üstelik kendi istemcisiyle (client) gelen tak-çalıştır bir kütüphane yazmak istedim. Hızlı prototipleme ve gömülü (embedded) sistemler için ideal bir çözüm.

Mimari & kararlar

Kütüphane Axum ve Tokio mimarisi üzerinde koşuyor. Veritabanı state'i, asenkron handler'lar arasında güvenle paylaşılabilmesi için Arc<Mutex<Connection>> ile sarmalandı. Sunucu motoru (EasyDB), tanımlanan tablolar üzerinde döngüye girerek Axum router'ına dinamik olarak endpoint'ler enjekte eder. Ağ I/O işlemleri asenkron çalışırken, SQLite'ın doğası gereği senkron olan disk okuma/yazma operasyonları thread-safe bir lock mekanizması ile yönetilir. Eşzamanlı olarak, kütüphane ile entegre gelen EasyClient, reqwest altyapısını kullanarak doğrudan bu API'yi tüketecek şekilde yapılandırılmıştır.

Temel özellikler

  1. 01Dinamik endpoint enjeksiyonu ile sıfır-boilerplate (zero-boilerplate) REST API üretimi
  2. 02Derlenmiş paket içinde gelen ve API'yi doğrudan tüketebilen asenkron EasyClient modülü
  3. 03Tablo ve kolon isimleri üzerinden yapılabilecek Identifier Injection saldırılarına karşı katı sanitization katmanı
  4. 04SQL Injection riskini tamamen ortadan kaldıran dinamik parameterized query (hazırlanmış ifade) altyapısı
  5. 05URL parametreleri üzerinden (?_sort=age&_order=desc) çalışan otonom filtreleme ve sıralama motoru

Teknik değerlendirme

Bu kütüphanenin altındaki en kritik mühendislik kararı, dinamik SQL üretimini güvenli hale getirmekti. Geleneksel parametre bağlama (prepared statements) yöntemleri, tablo veya kolon isimlerine yapılan müdahalelere (identifier injection) karşı koruma sağlamaz. Bu yüzden, dışarıdan gelen key'leri SQL string'ine katmadan önce is_valid_identifier fonksiyonuyla katı bir ASCII/Alfanümerik filtreden geçiren özel bir güvenlik duvarı kurdum. Crates.io'da yayınlanmış olması, bu aracı herhangi bir Rust projesine anında eklenebilir, production-ready bir mikro mimari bileşeni haline getiriyor.

Backend & API

Smart TV Yerel Medya Sunucusu: Rust & Axum Backend

Rust ile geliştirilmiş, yüksek performanslı ve asenkron bir medya akış (streaming) ve indeksleme sunucusu. Ham medya dosyalarını HTTP üzerinden sunarken, FFmpeg alt süreçleri (subprocess) aracılığıyla dinamik olarak video küçük resimleri (thumbnail) ve ileri/geri sarma (scrubbing) önizlemeleri üretir.

  • Rust
  • Axum
  • Tokio
  • +4

Araçlar

Rust ASCII Terminal Video Engine

Medya akışlarını yakalayan, FFmpeg ile donanım hızlandırmalı kare (frame) çıkarımı yapan ve terminal üzerinde izole bir ses thread'i ile senkronize edilmiş gerçek zamanlı ASCII render işlemi gerçekleştiren multithreaded Rust CLI motoru.

  • Rust
  • Crossterm
  • Rodio
  • +3

Araçlar

OCR: PNG'den Metne Çevirici

PNG formatındaki görsellerden toplu (batch) olarak metin çıkaran ve bunları düzenlenebilir dosyalara dönüştüren, manuel veri girişini ortadan kaldıran otomatik bir optik karakter tanıma aracı.

  • Python
  • Tkinter
  • Tesseract OCR
  • +2

Benzer bir ihtiyacınız mı var?

Bu tür bir sistemi sizin için de kurabilirim.

Projenizi birkaç cümleyle anlatın; doğru yaklaşımı ve tahmini kapsamı birlikte belirleyelim.