

FastAPI là framework hiện đại để xây dựng REST API với Python, nổi bật nhờ tốc độ xử lý cực nhanh và tích hợp sẵn Pydantic để validate dữ liệu. Framework này đã trở thành lựa chọn hàng đầu cho backend AI/ML và microservice nhờ hiệu năng tương đương Node.js và Go. Được xây dựng trên Starlette và Uvicorn, FastAPI tận dụng ASGI để xử lý hàng nghìn kết nối đồng thời trên một core CPU. Điểm mạnh lớn nhất của FastAPI là developer chỉ cần viết type hints, framework tự sinh validation, serialization và documentation. FastAPI cũng hỗ trợ tốt cho phát triển API-first, phù hợp với các team làm việc theo mô hình contract-first.
Tại sao FastAPI nhanh hơn Flask hay Django?
Flask và Django chạy trên WSGI, xử lý từng request tuần tự trên mỗi worker. FastAPI dùng ASGI, cho phép xử lý bất đồng bộ với async/await. Kết quả: FastAPI đứng đầu các benchmark framework Python với khoảng 30.000 request/giây trên máy tính cá nhân, gấp 3-5 lần Flask và gấp 10 lần Django REST Framework trên cùng phần cứng. Điều này đến từ việc Uvicorn sử dụng uvloop thay cho asyncio mặc định, tối ưu hóa event loop cho I/O-bound workloads. Uvicorn còn hỗ trợ HTTP/2, cho phép multiplexing nhiều request qua một kết nối TCP.

Pydantic validation tự động
Pydantic giúp định nghĩa schema dữ liệu bằng Python type hints. Khi client gửi request sai kiểu, FastAPI tự động trả về lỗi 422 chi tiết mà không cần viết if/else thủ công. Pydantic v2 cải thiện tốc độ validation đáng kể nhờ Rust backend, nhanh hơn Pydantic v1 khoảng 5-50 lần tùy use case. Ví dụ:
from pydantic import BaseModel, EmailStr, Field, field_validator, ConfigDict
from fastapi import FastAPI, HTTPException, Depends
app = FastAPI()
class User(BaseModel):
model_config = ConfigDict(str_strip_whitespace=True)
name: str = Field(min_length=3, max_length=50)
email: EmailStr
age: int = Field(ge=0, le=150)
role: str = "user"
@field_validator('name')
def name_alphanumeric(cls, v):
if not v.replace(' ', '').isalnum():
raise ValueError('Tên chỉ chứa chữ và số')
return v.title()
@app.post("/users")
def create(user: User):
return {"ok": True, "data": user.model_dump()}
Dependency Injection và middleware
FastAPI có hệ thống Dependency Injection mạnh mẽ giúp quản lý database session, auth, và config. Bạn có thể khai báo dependency trong parameter của endpoint, FastAPI tự động inject giá trị. Điều này rất hữu ích khi viết unit test, bạn chỉ cần mock dependency thay vì mock toàn bộ app. Middleware cũng được hỗ trợ để xử lý CORS, logging, hoặc rate limiting toàn cục. FastAPI còn tích hợp sẵn OpenAPI schema generation, cho phép generate client SDK tự động bằng OpenAPI Generator hoặc Prism.
Tính năng nổi bật khác
- Auto OpenAPI: Tạo Swagger UI và ReDoc tự động tại
/docs, không cần cấu hình thêm - Dependency Injection: Quản lý database session, auth, và config gọn gàng, dễ test
- WebSocket: Hỗ trợ real-time không cần thư viện ngoài
- Background Tasks: Xử lý job chạy nền như gửi email hay sinh báo cáo
- OAuth2 + JWT: Tích hợp sẵn security flows với passlib và python-jose
- Static files: Serve file tĩnh qua StaticFiles mount
- Streaming response: Trả về response dạng stream cho file lớn

So sánh với các framework khác
| Tiêu chí | FastAPI | Flask | Django REST |
|---|---|---|---|
| Async native | Có | Không | Mới hỗ trợ |
| Validation | Pydantic | Thủ công | Serializer |
| Auto docs | OpenAPI | Flask-RESTX | drf-yasg |
| Type hints | Bắt buộc | Tuỳ chọn | Tuỳ chọn |
| Hiệu năng | Cực cao | Trung bình | Thấp |
| ORM tích hợp | SQLAlchemy, Tortoise | SQLAlchemy | Django ORM |
| WebSocket | Có | Flask-SocketIO | Channels |
ORM và database
FastAPI không bắt buộc dùng ORM cụ thể, bạn có thể chọn SQLAlchemy 2.0 với async engine, Tortoise ORM async-native, hoặc thậm chí raw SQL. SQLAlchemy 2.0 hỗ trợ async tốt hơn, kết hợp với Pydantic model dễ dàng qua sqlalchemy2pydantic. SQLModel của tác giả FastAPI cũng là lựa chọn tốt, kết hợp SQLAlchemy và Pydantic trong một lớp duy nhất.
Testing và deployment
FastAPI sử dụng TestClient dựa trên requests, cho phép viết unit test và integration test cùng lúc. Bạn có thể test endpoint mà không cần khởi động server thật. Deployment thường dùng Uvicorn với Gunicorn hoặc Hypercorn phía sau Nginx reverse proxy. Docker image nhẹ, base image python:3.12-slim là đủ cho hầu hết production. Kubernetes deployment cũng đơn giản nhờ container nhẹ và startup nhanh.
Khi nào nên dùng FastAPI?
FastAPI phù hợp cho API phục vụ machine learning, microservice cần hiệu năng cao, và team muốn development nhanh nhờ auto-generated docs. Nếu dự án cần CMS hoặc admin panel mạnh, Django REST Framework vẫn phù hợp hơn nhờ ecosystem đồ sộ. Đối với prototype nhanh hoặc microservice đơn giản, Flask vẫn đủ dùng. Với các ứng dụng cần WebSocket hay Server-Sent Events, FastAPI xử lý native mà không cần hack. Nếu team đã quen TypeScript và muốn backend đồng nhất, NestJS là lựa chọn tương đương trong Node.js.
Nói ngắn gọn: FastAPI giúp developer viết ít code hơn, validate sớm hơn, và deploy nhanh hơn. Đây là lựa chọn tối ưu cho hầu hết backend Python hiện đại, đặc biệt khi kết hợp với LLM và AI services.
