Backend Python & FastAPI — API hiện đại, dễ mở rộng

← Trang chủ
Backend & API

Backend Python & FastAPI — API hiện đại, dễ mở rộng

FastAPI là framework Python tham chiếu cho API REST bất đồng bộ. Nó kết hợp type hint gốc của Python với xác thực Pydantic tự động, tài liệu OpenAPI tự sinh và hiệu suất ASGI bất đồng bộ — mà không hy sinh khả năng đọc mã.

FastAPI — framework API cho Python

FastAPI chạy trên Uvicorn (máy chủ ASGI) cùng Gunicorn cho đa tiến trình trong production. Một endpoint đọc dữ liệu từ cache Redis mà không cần truy vấn cơ sở dữ liệu cho mỗi request. Dependency Injection gốc cho phép kiểm thử cô lập bất kỳ tầng nào mà không cần mock phức tạp: xác thực, phiên cơ sở dữ liệu, giới hạn tốc độ — mỗi thứ đều là một dependency có thể tiêm.

Tài liệu OpenAPI 3.1 được tự động sinh từ type hint — Swagger UI và ReDoc có sẵn tại `/docs` và `/redoc` trong môi trường phát triển. Schema Pydantic v2 (bộ xác thực viết bằng Rust) xác thực request và response nhanh hơn Pydantic v1 từ 10–20 lần. Mọi trường không hợp lệ đều trả về lỗi 422 với thông báo rõ ràng, được địa phương hóa.

  • async/await gốc — I/O không chặn trên mọi thao tác DB và HTTP
  • BackgroundTasks cho các thao tác sau phản hồi (email, webhook, log)
  • Hỗ trợ WebSocket gốc cho tính năng thời gian thực (chat, thông báo)
  • Giới hạn tốc độ với slowapi (dựa trên limits) — theo từng IP và từng người dùng
  • CORS, nén (gzip/brotli), request ID, middleware đo thời gian

PostgreSQL, SQLAlchemy và Alembic

Chúng tôi dùng SQLAlchemy 2.0 async (driver asyncpg) cho mọi thao tác DB. Các model được định nghĩa với kiểu Mapped — an toàn kiểu, không dùng chuỗi. Truy vấn phức tạp được viết bằng SQLAlchemy Core (kiểm tra lúc biên dịch) hoặc SQL thuần qua `text()` với bind parameter — không bao giờ nối chuỗi (giúp ngăn chặn SQLi).

Migration Alembic được tự động sinh từ thay đổi của model và được xem xét thủ công trước khi áp dụng. Mỗi migration có `upgrade()` và `downgrade()` đã được kiểm thử. Trong production, migration chạy trong CI trước khi triển khai — cơ sở dữ liệu luôn đồng bộ với mã. Connection pooling qua asyncpg với kích thước pool cấu hình được cho từng dịch vụ.

  • Khóa mức hàng với `SELECT ... FOR UPDATE` cho các thao tác đồng thời quan trọng
  • Tìm kiếm toàn văn với pg_trgm và tsvector — không cần Elasticsearch cho các trường hợp đơn giản
  • JSONB cho dữ liệu bán cấu trúc với chỉ mục GIN
  • Bảng phân vùng (partition) cho các bảng có hàng triệu dòng (log, sự kiện)

Cache Redis và khả năng mở rộng ngang

Redis 7 được dùng cho cache ứng dụng (TTL theo từng endpoint), lưu trữ phiên (refresh token JWT với thu hồi có chọn lọc), pub/sub cho sự kiện thời gian thực và hàng đợi cho tác vụ nền (Celery hoặc ARQ). Chiến lược cache là cache-aside với vô hiệu hóa tường minh — không phải TTL mù quáng có thể trả về dữ liệu cũ.

  • Xác thực JWT với access token (15 phút) + refresh token Redis (7 ngày)
  • Celery + Redis broker cho tác vụ bất đồng bộ (tạo PDF, email, nhập dữ liệu)
  • Endpoint health check `/health` với trạng thái DB, Redis và phiên bản triển khai
  • Ghi log JSON có cấu trúc (structlog) — tương thích Loki/Datadog/ELK

Ưu điểm và hạn chế

Ưu điểm

  • Mô hình ASGI bất đồng bộ, phù hợp các tác vụ I/O.
  • Tài liệu OpenAPI tự sinh từ type hint.
  • Xác thực Pydantic v2 nhanh, kèm lỗi 422 rõ ràng.
  • Mã dễ đọc, Python quen thuộc với hầu hết các đội ngũ.

Hạn chế

  • Python vẫn chậm hơn Go hoặc Rust ở các tác vụ nặng về CPU.
  • async/await đòi hỏi kỷ luật — một lệnh gọi chặn có thể làm đứng cả event loop.
  • Hệ sinh thái trẻ hơn Django về các tính năng tích hợp sẵn.
  • Không có ORM hay trang admin tích hợp — bạn chọn riêng từng thứ.

Kết luận nhanh

Hãy chọn FastAPI cho API REST bất đồng bộ, microservice và backend cho SPA/di động. Với các ứng dụng cực kỳ nặng về CPU hoặc monolith cần admin dựng sẵn, lần lượt Go hoặc Django có thể phù hợp hơn.

Bảng thông số kỹ thuật

Khả năngGiới hạn / ngưỡngTrường hợp sử dụng điển hình
Đồng thờiasync/await, I/O không chặnTác vụ nặng CPU cần worker riêngAPI có nhiều lệnh gọi DB/HTTP
Độ trễEndpoint đọc từ cache Redis, không cần truy vấn DB cho mỗi requestTăng khi tuần tự hóa payload lớnSaaS, di động, backend thời gian thực
Xác thực & tài liệuPydantic v2 + OpenAPI 3.1 tự độngSchema phức tạp làm tăng thời gian khởi độngAPI công khai với Swagger/ReDoc
Chi phí điển hìnhMã nguồn mở, chạy trên 1 vCPUMở rộng ngang cần thêm tiến trìnhTừ MVP đến production

FastAPI so với các giải pháp thay thế

Tiêu chíFastAPIDjango / Express
Hiệu suất bất đồng bộXuất sắc (ASGI gốc)Django một phần, Express tốt
Tài liệu OpenAPI tự độngCó, từ type hintCần thêm gói bổ sung
Admin / ORM tích hợpKhông (chọn riêng)Django: có; Express: không

Câu hỏi thường gặp

FastAPI có nhanh hơn Django không?

Có với tác vụ I/O. FastAPI chạy bất đồng bộ trên ASGI, nên xử lý được nhiều request đồng thời có gọi DB/HTTP hiệu quả hơn Django đồng bộ cổ điển. Tuy nhiên, Django có nhiều tính năng tích hợp hơn.

FastAPI không phù hợp với việc gì?

Với các tác vụ nặng về CPU (xử lý ảnh, tính toán số học nặng), Python chậm hơn Go hoặc Rust; bạn chuyển chúng sang worker riêng. FastAPI cũng không có admin dựng sẵn như Django.

FastAPI có cần ORM không?

Không bắt buộc. Chúng tôi dùng SQLAlchemy 2.0 async với Alembic cho migration, nhưng bạn có thể viết SQL thuần. ORM không đi kèm sẵn, nên bạn chọn theo từng dự án.

Làm sao mở rộng một backend FastAPI?

Theo chiều ngang: chạy nhiều tiến trình Uvicorn dưới Gunicorn phía sau bộ cân bằng tải, với cache Redis và các tác vụ nặng chuyển sang Celery. Thiết kế stateless cho phép thêm instance khi cần.

4b2b.net
Hệ sinh thái kinh doanh
4conta.ro
Kế toán
4invoices.net
Ứng dụng hóa đơn
4expenses.net
Quản lý chi phí
4notify.net
Thông báo
4hosting.net
Lưu trữ web
4database.net
Cơ sở dữ liệu
4buildsite.net
Trình tạo website
4myapp.net
Trình tạo ứng dụng
4avatars.net
Avatar AI
4chaty.net
Chatbot AI
4webagency.net
Phần mềm cho agency web
4softedu.net
Website giáo dục
4softcrm.net
Nền tảng CRM
4softerp.net
Hệ thống ERP
4softhr.net
Quản lý nhân sự
4mystaff.net
Cổng nhân viên
4myprojects.net
Quản lý dự án
4mycontracts.net
Hợp đồng
4docs.net
Quản lý tài liệu
4appointments.net
Đặt lịch hẹn
4marketingonline.net
Tiếp thị
4insurance.net
Bảo hiểm
4property.net
Bất động sản
4lawyers.net
Phần mềm pháp lý
4mygarage.net
Garage ô tô
4driving.net
Trường dạy lái xe
4fleet.net
Quản lý đội xe
4myevents.net
Sự kiện
4therapy.net
Trị liệu
4clinics.net
Phòng khám
4dental.net
Phòng khám nha khoa
4restaurants.net
Nhà hàng
4beautify.net
Salon làm đẹp
4gym.net
Phòng tập thể hình
4guards.net
Công ty bảo vệ
4softvet.net
Phòng khám thú y
4softauto.net
Phần mềm kinh doanh ô tô
4construct.net
Công ty xây dựng
4marketplace.net
Sàn thương mại
4shopy.net
Cửa hàng trực tuyến
4pricing.net
So sánh giá
4salefood.net
Giao đồ ăn
4rentify.net
Cho thuê
4transports.net
Vận tải
4agencytravel.net
Công ty du lịch
4hotel.net
Quản lý khách sạn
4ong.net
Quản lý tổ chức phi lợi nhuận