Litestar layak dilirik
(b-list.org)- Litestar adalah permata tersembunyi di antara framework web async Python
- Berkat skalabilitas yang cepat dan arsitektur yang fleksibel, framework ini mudah diterapkan ke berbagai proyek
- Menyediakan pemodelan data yang tidak bergantung pada library tertentu seperti Pydantic
- Integrasi SQLAlchemy sangat baik, sehingga unggul dalam koneksi dan pengelolaan basis data
- Fitur bawaan yang praktis seperti autentikasi, caching, logging, dan monitoring membuatnya bisa langsung dipakai di lingkungan kerja
Gambaran umum Litestar
- Dalam beberapa tahun terakhir, framework web Python async-first berbasis type hint semakin mendapat perhatian, dan Litestar dipilih sebagai salah satunya untuk memperdalam pengalaman penggunaan
- Setelah mengadopsi Litestar sebagai framework utama di beberapa proyek nyata, keyakinan terhadap pilihan tersebut terus meningkat
- Karena banyak developer web Python yang masih belum mengenal Litestar, tulisan ini memperkenalkan kelebihan utama dan ciri khasnya
Contoh dan perbandingan framework
-
Litestar memudahkan pembuatan aplikasi web satu file yang sangat sederhana
- Route decorator adalah fungsi independen yang tidak terikat pada objek aplikasi
- Pada kode contoh, mengakses
/greet?name=Bobakan mengembalikan “Hi, Bob!” - Jika parameter wajib tidak ada, respons 400 akan diberikan secara otomatis
-
Berbeda dari microframework Python yang sudah ada seperti Flask dan FastAPI, Litestar memiliki karakteristik struktural yang membuatnya meluas secara alami pada proyek dengan berbagai skala
- Pada pendekatan Flask atau FastAPI, routing decorator terikat pada objek aplikasi sehingga saat dipisah ke banyak file ada potensi muncul masalah circular import
- Biasanya perlu memanfaatkan route registry turunan (Flask/Quart memakai blueprint, FastAPI memakai APIRouter, dan sebagainya), sehingga hambatan awal lebih tinggi atau perubahan struktur menjadi perlu
- Namun di Litestar, decorator adalah fungsi independen, sehingga perpindahan antara aplikasi satu file dan struktur terdistribusi skala besar menjadi sangat ringkas
-
Berkat arsitektur dasar dan cara penulisan dokumentasi di Litestar, konsep router dan pengelompokan fitur bisa diperkenalkan sejak sangat awal, sehingga lebih mudah menjaga konsistensi saat menyusun API yang kompleks
- Kekuatan utamanya ada pada composability seperti dependency injection, otorisasi, dan berbagi config per rute
- Rute yang sama bisa didaftarkan beberapa kali sehingga autentikasi atau dependensi yang berbeda dapat diterapkan sesuai lingkungan
Pemodelan yang lepas dari ketergantungan pada Pydantic
-
FastAPI dan sejenisnya sangat bergantung pada data berbasis Pydantic
- Pydantic unggul untuk validasi dan serialisasi data berbasis tipe, tetapi sulit diintegrasikan langsung dengan ORM (SQLAlchemy)
- Dalam praktik kerja, ini merepotkan karena model SQLAlchemy dan model Pydantic harus ditulis terpisah
-
Litestar mendukung berbagai tipe secara umum, bukan hanya Pydantic tetapi juga dataclasses, msgspec, attrs, dan model SQLAlchemy
- Memiliki serialization plugin protocol untuk meningkatkan ekstensibilitas
- Dilengkapi fitur ekstraksi otomatis data transfer object (DTO), sehingga jika kelas data sumber diubah maka DTO ikut diperbarui otomatis
- Pengecualian sebagian field, penyertaan, pemetaan nama, dan DTO untuk partial update juga bisa dideklarasikan dengan sederhana
- Dengan demikian, duplikasi deklarasi field model serta kesalahan yang sering terjadi saat sinkronisasi manual dapat dihindari
Integrasi dengan SQLAlchemy dan pengenalan Advanced Alchemy
-
SQLAlchemy ORM adalah standar de facto untuk koneksi basis data di Python
- Litestar sangat unggul dalam integrasi seperti serialisasi skema otomatis SQLAlchemy, otomatisasi DTO, plugin manajemen sesi, dan plugin gabungan
-
Melalui library Advanced Alchemy (dipelihara oleh tim Litestar), kemampuan SQLAlchemy diperluas
- Menyediakan berbagai fitur peningkatan kualitas seperti PK besar yang database-agnostic, timestamp otomatis, kunci UUID, tipe JSON, integrasi migrasi Alembic, serta Seed/Export
- Fitur yang paling menonjol adalah dukungan abstraksi repository dan service layer, yang secara otomatis menyediakan berbagai fungsi penyimpanan seperti CRUD dan pagination
- Tidak seperti Django, pada framework yang panduan strukturnya lebih longgar, ini menghadirkan pola organisasi yang layak direkomendasikan untuk mengadopsi repository/service layer
Fitur lain dan dukungan bawaan
- Litestar juga menyediakan secara internal sistem autentikasi (fungsi guard, middleware), caching (stores), logging, respons masalah yang terstandar, metrik berbasis Prometheus/OpenTelemetry, serta dukungan htmx
- Berbeda dari microframework lain, untuk menerapkan sebagian fitur tersebut tidak perlu mencari library eksternal terpisah atau menulis glue code kustom
- Ia tetap mempertahankan kesederhanaan sebuah "microframework", tetapi saat perlu diperluas atau memakai fitur tambahan, semuanya bisa langsung dimanfaatkan sesuai kebutuhan
- Konsepnya bukan sekadar pengganti Django/Flask, melainkan menggabungkan kekuatan framework bahasa lain seperti Java Spring Boot (struktur awal + kemudahan) ke dalam pendekatan yang Pythonic
- Secara keseluruhan, ini adalah opsi dengan produktivitas tinggi dan keunggulan struktural untuk pengembangan web Python di dunia kerja
Kesimpulan
- Berkat async, berbasis tipe, fleksibel untuk diperluas, pemodelan data yang tidak terlalu ketat, serta ORM dan fitur bawaan yang sangat baik, Litestar muncul sebagai framework yang wajib setidaknya sekali dipertimbangkan oleh developer web Python
- Dari hasil penggunaan berulang di proyek nyata, terbukti memiliki produktivitas dan kemudahan pemeliharaan yang tinggi, termasuk di lingkungan startup dan berbagai jenis proyek
- Diharapkan para developer memasukkan Litestar sebagai salah satu opsi saat merencanakan proyek web Python berikutnya
2 komentar
Bukankah untuk "masalah circular import" di Python sudah ada solusi yang cukup jelas? Jadi rasanya agak kurang tepat kalau dianggap sebagai masalah besar.
Opini Hacker News
@post("/route", exception_handlers={...})terasa canggung. Saya berharap ke depan ada tool bawaan yang lebih baik dan peningkatan developer experience@postformyang menangani semua proses terkait form?