Litestar’a Bir Göz Atmakta Fayda Var
(b-list.org)- Litestar, Python asenkron web framework’leri arasında daha az bilinen bir cevher
- Hızlı ölçeklenebilirlik ve esnek mimarisi sayesinde farklı projelere kolayca uygulanabiliyor
- Pydantic gibi belirli kütüphanelere bağımlı olmayan veri modelleme sunuyor
- SQLAlchemy entegrasyonu çok güçlü; veritabanı bağlantısı ve yönetiminde avantaj sağlıyor
- Kullanışlı kimlik doğrulama, cache, logging, monitoring gibi yerleşik özellikleri ile doğrudan gerçek projelerde kullanılabiliyor
Litestar Genel Bakış
- Son birkaç yılda async-first, type hint tabanlı Python web framework’leri öne çıkarken, bunlardan biri olan Litestar seçilerek kullanım deneyimi kazanıldı
- Gerçekten birden fazla projede Litestar ana framework olarak benimsendikçe, bu seçime duyulan güven artmaya devam etti
- Python web geliştiricileri arasında bile Litestar’ı bilmeyen çok kişi olduğu için, bu yazı üzerinden başlıca avantajları ve öne çıkan özellikleri tanıtılıyor
Örnekler ve framework karşılaştırması
-
Litestar ile çok basit bir tek dosyalı web uygulaması bile kolayca yazılabiliyor
- route decorator, uygulama nesnesine bağlı olmayan bağımsız bir fonksiyon
- Örnek kodda
/greet?name=Bobadresine gidildiğinde “Hi, Bob!” döndürülüyor - Zorunlu parametre eksik olduğunda otomatik olarak 400 yanıtı veriliyor
-
Flask, FastAPI gibi mevcut Python mikroframework’lerinden farklı olarak Litestar, farklı ölçeklerdeki projelerde doğal şekilde genişleyebilen yapısal özelliklere sahip
- Flask veya FastAPI yaklaşımında routing decorator’ları uygulama nesnesine bağlı olduğundan, çok dosyalı ayrımda döngüsel import sorunu ortaya çıkabiliyor
- Genellikle alt route registry’leri (Flask/Quart için blueprint, FastAPI için APIRouter vb.) kullanmak gerektiğinden giriş eşiği yükseliyor veya yapısal değişiklik ihtiyacı doğuyor
- Buna karşılık Litestar’da decorator bağımsız bir fonksiyon olduğu için, tek dosyalı bir uygulamadan büyük ve dağıtık bir yapıya geçiş oldukça sade kalıyor
-
Litestar’ın temel mimarisi ve dokümantasyon yaklaşımı sayesinde, router ve özellik paketleri kavramları en baştan tanıtılabiliyor; bu da karmaşık API yapılarında tutarlılığı korumayı kolaylaştırıyor
- Dependency injection, yetkilendirme, yol bazlı config paylaşımı gibi konularda composability güçlü bir taraf
- Aynı route birden fazla kez kaydedilerek ortama göre kimlik doğrulama veya dependency uygulamak mümkün
Pydantic bağımlılığından uzak modelleme
-
FastAPI gibi framework’ler veriyi Pydantic’e güçlü biçimde bağlıyor
- Pydantic, tip tabanlı veri doğrulama ve serileştirmede güçlü; ancak ORM (SQLAlchemy) ile doğrudan entegrasyonu zor
- Gerçek projelerde SQLAlchemy modeli ile Pydantic modelini ayrı ayrı yazmak gerekmesi zahmet yaratıyor
-
Litestar, yalnızca Pydantic değil dataclasses, msgspec, attrs, SQLAlchemy model gibi çok çeşitli tipleri genel amaçlı olarak destekliyor
- serialization plugin protocol ile genişletilebilirlik sunuyor
- DTO (veri aktarım nesnesi) otomatik çıkarma özelliği sayesinde yalnızca kaynak veri sınıfı değiştirildiğinde DTO da otomatik güncelleniyor
- Bazı alanları hariç tutma, dahil etme, isim eşleme, kısmi güncelleme DTO’ları gibi yapılar da kolayca tanımlanabiliyor
- Böylece model alanlarını tekrar tekrar tanımlama ve elle senkronizasyon sırasında yapılan sık hatalar önlenebiliyor
SQLAlchemy ile entegrasyon ve Advanced Alchemy tanıtımı
-
SQLAlchemy ORM, fiilen Python veritabanı entegrasyonunun standardı
- Litestar; SQLAlchemy şemasının otomatik serileştirilmesi, DTO otomasyonu, oturum yönetimi eklentisi ve birleşik eklentiler gibi alanlarda son derece güçlü bir entegrasyon sunuyor
-
Advanced Alchemy kütüphanesi (Litestar ekibi tarafından bakımı yapılıyor) ile SQLAlchemy yetenekleri daha da genişliyor
- Veritabanından bağımsız büyük PK, otomatik timestamp, UUID anahtarları, JSON tipi, Alembic migration entegrasyonu, Seed/Export gibi çeşitli kalite iyileştirme özellikleri sunuluyor
- Özellikle dikkat çeken özellik, repository ve service layer soyutlamalarını desteklemesi; böylece CRUD ve pagination gibi birçok depo işlevi otomatik sağlanıyor
- Django’dan farklı olarak yapısal rehberliği daha zayıf framework’lerde, repository/service layer kullanımını teşvik edecek bir organizasyon biçimi sunuyor
Diğer özellikler ve yerleşik destekler
- Litestar; kimlik doğrulama sistemi (guard fonksiyonu, middleware), cache (stores), logging, standartlaştırılmış problem yanıtları, Prometheus/OpenTelemetry tabanlı metrikler, htmx desteği gibi özellikleri de framework içinde sunuyor
- Diğer mikroframework’lerin aksine, bazı özellikleri uygularken ayrı harici kütüphaneler aramaya veya özel glue code yazmaya gerek kalmıyor
- “Mikroframework” sadeliğini korurken, genişleme veya ek özellik ihtiyacında gerekenleri doğrudan kullanıma açıyor
- Django/Flask alternatifi olmaktan çok, Java Spring Boot gibi başka dillerdeki framework’lerin güçlü yönlerini (başlangıç yapısı + kullanım kolaylığı vb.) Pythonic bir yaklaşımla birleştirme fikrine dayanıyor
- Genel olarak gerçek dünya Python web geliştirmesinde yüksek üretkenlik ve yapısal avantajlar sunan bir seçenek
Sonuç
- Litestar; asenkron yapı, tip tabanlı yaklaşım, esnek ölçeklenebilirlik, sıkı olmayan veri modelleme, güçlü ORM ve yerleşik özellikleri sayesinde Python web geliştiricilerinin mutlaka en az bir kez değerlendirmesi gereken bir framework olarak öne çıkıyor
- Gerçek projelerde tekrar tekrar kullanılması sonucunda, startup’lar dahil çeşitli proje ortamlarında yüksek üretkenlik ve bakım kolaylığı sağladığı görüldü
- Geliştiricilerin bir sonraki Python web projesini planlarken Litestar’ı seçeneklerden biri olarak değerlendirmesi umuluyor
2 yorum
Python’daki "circular import sorunu" için zaten net bir çözüm yok mu? Bunu büyük bir sorun olarak görmek biraz zorlama gibi geliyor bana.
Hacker News görüşü
@post("/route", exception_handlers={...})kullanan yaklaşım biraz tuhaf geliyor. İleride daha iyi yerleşik araçlar ve geliştirici deneyimi iyileştirmeleri gelmesini umuyorum@postformgibi bir şey yazmak mümkün olmaz mı diye düşünüyorum