Vấn đề: Tại sao phải tìm phương án thay thế FastAPI?
FastAPI từ lâu đã là lựa chọn “quốc dân” khi anh em cần build REST API bằng Python. Bản thân mình cũng từng dùng nó cho mọi thứ, từ script automation nhỏ đến hệ thống monitoring lớn. Tuy nhiên, khi dự án phình to lên hàng chục nghìn dòng code, mình bắt đầu vấp phải những phiền toái khó chịu. Dependency Injection (DI) trở nên rối rắm, việc quản lý schema dữ liệu (DTO) tốn quá nhiều boilerplate code, và hiệu năng đôi khi chạm ngưỡng giới hạn khi xử lý JSON lớn.
Đó là lúc mình bén duyên với Litestar (trước đây là Starlite). Nó không chỉ nhanh hơn trên các bản benchmark mà còn cung cấp một bộ khung cực kỳ chặt chẽ. Litestar không thay đổi hoàn toàn cách bạn viết Python. Nó chỉ đơn giản là làm cho code trở nên chuyên nghiệp, dễ bảo trì và nhất quán hơn hẳn.
Quick Start: Chạy API đầu tiên trong 5 phút
Không cần lý thuyết suông, chúng ta hãy bắt tay vào cài đặt để thấy sự khác biệt ngay lập tức.
1. Cài đặt
Mở terminal và cài đặt phiên bản tiêu chuẩn của Litestar:
pip install litestar[standard]
2. Viết code
Tạo file app.py với vài dòng code cơ bản sau:
from litestar import Litestar, get
@get("/")
async def hello_world() -> dict[str, str]:
return {"message": "Chào mừng bạn đến với Litestar!"}
@get("/greet/{name:str}")
async def greet(name: str) -> dict[str, str]:
return {"message": f"Xin chào {name}, chúc bạn học tốt!"}
app = Litestar(route_handlers=[hello_world, greet])
3. Khởi chạy ứng dụng
Sử dụng CLI tích hợp sẵn để chạy server:
litestar run --reload
Truy cập http://127.0.0.1:8000/greet/Engineer và bạn sẽ thấy kết quả ngay. Điểm cộng lớn là Litestar tự động chuẩn bị sẵn tài liệu Swagger UI tại đường dẫn /schema/swagger. Bạn không cần cấu hình thêm bất kỳ dòng code nào để có bộ tài liệu API chuyên nghiệp.
Tại sao Litestar lại vượt trội hơn trong thực tế?
Nhiều bạn sẽ thắc mắc: “Cú pháp trông cũng giống FastAPI, vậy điểm khác biệt nằm ở đâu?”. Câu trả lời nằm ở kiến trúc bên dưới.
Quản lý bằng Class-based Controllers
Trong các dự án lớn, việc lạm dụng decorator @get hay @post ở khắp nơi sẽ biến file main thành một mớ hỗn độn. Litestar giải quyết việc này bằng Controller. Cách tiếp cận này giúp nhóm các logic liên quan lại một chỗ một cách khoa học.
from litestar import Controller, get, post
class UserController(Controller):
path = "/users"
@get()
async def list_users(self) -> list[dict]:
return [{"id": 1, "name": "Admin"}]
@post()
async def create_user(self, data: dict) -> dict:
return data
app = Litestar(route_handlers=[UserController])
Khi mình làm các tool automation, việc tách biệt Controller cho server, log và user giúp code sạch sẽ hơn hẳn. Bạn sẽ không còn phải hoa mắt tìm kiếm giữa hàng trăm endpoint nữa.
DTO (Data Transfer Objects) – Vũ khí tối thượng
Đây là tính năng mình thích nhất. Thông thường, bạn phải tạo hàng tá Model Pydantic để lọc dữ liệu đầu vào và đầu ra. Với Litestar DTO, bạn có thể tự động tạo schema từ SQLAlchemy models mà không cần viết lại từng field.
Nó giúp tách bạch hoàn toàn lớp Database và lớp API Response. Bạn sẽ không bao giờ lo lắng về việc vô tình để lộ những thông tin nhạy cảm như hashed_password ra ngoài API nữa.
Tối ưu hiệu năng: Nhanh hơn nhờ msgspec
Litestar không chỉ nhanh nhờ framework mà còn nhờ thư viện serialize. Theo các bài test, việc sử dụng msgspec mặc định giúp Litestar xử lý JSON nhanh hơn gấp 2 đến 5 lần so với Pydantic v1 truyền thống. Điều này cực kỳ quan trọng khi hệ thống của bạn phải gánh hàng nghìn request mỗi giây.
Dependency Injection (DI) phân tầng
DI trong Litestar linh hoạt hơn FastAPI rất nhiều. Bạn có thể định nghĩa dependency ở cấp App, Router hoặc từng Controller riêng lẻ.
from litestar import Litestar, get, Provide
def get_db_connection() -> str:
return "DB Connected"
@get("/status", dependencies={"db": Provide(get_db_connection)})
async def check_status(db: str) -> dict:
return {"status": db}
app = Litestar(route_handlers=[check_status])
Cấu trúc này giúp việc viết Unit Test trở nên cực kỳ dễ dàng. Bạn chỉ cần mock dữ liệu ở cấp độ cao nhất mà không phải sửa từng function.
Kinh nghiệm thực tế khi triển khai
Sau khi chuyển đổi nhiều hệ thống monitoring sang Litestar, mình rút ra được vài lưu ý nhỏ:
- Tận dụng CLI: Hãy dùng lệnh
litestar routesthường xuyên. Nó giúp bạn bao quát toàn bộ endpoint trong project chỉ trong 1 giây. - Middleware thông minh: Nếu cần log thời gian phản hồi (response time), hãy viết một middleware ở cấp App. Nó sẽ tự động áp dụng cho mọi controller bên dưới.
- Ưu tiên msgspec: Khi làm việc với dữ liệu lớn (Big Data), hãy dùng
msgspec. Tốc độ xử lý sẽ được cải thiện rõ rệt so với cách làm cũ. - Cấu trúc thư mục: Hãy chia rõ
controllers/,models/vàdtos/. Đừng bao giờ nhét tất cả vào filemain.pynếu không muốn hối hận sau này.
Thực tế không có framework nào là hoàn hảo nhất cho mọi trường hợp. Tuy nhiên, nếu bạn cần sự chặt chẽ, hiệu năng thực thụ và khả năng mở rộng tốt, Litestar là cái tên rất đáng để đầu tư thời gian.
Việc chuyển từ FastAPI sang Litestar khá dễ dàng vì cú pháp tương đồng. Những lợi ích về mặt kiến trúc sẽ giúp bạn tiết kiệm hàng giờ đồng hồ debug và bảo trì sau này.

