0

FastAPI sự lựa chọn tuyệt vời cho hệ thống Backend


🚀 FastAPI – Framework Python hiện đại cho Backend API

image.png

1. FastAPI là gì?

FastAPI là một framework web hiện đại của Python dùng để xây dựng API nhanh, hiệu năng cao, và dễ maintain. Nó được xây dựng dựa trên:

  • Starlette (cho web handling)
  • Pydantic (cho validation và serialization)

👉 Điểm mạnh nổi bật:

  • Tốc độ gần ngang Node.js / Go
  • Tự động generate OpenAPI (Swagger UI)
  • Type hinting mạnh mẽ
  • Async-first (rất phù hợp microservice / event-driven)

2. Tại sao nên dùng FastAPI?

✅ Ưu điểm

Feature Mô tả
⚡ High Performance Gần như ngang Node.js (uvicorn + ASGI)
🧠 Type-safe Dùng type hint → ít bug
📄 Auto Docs Swagger UI + Redoc tự động
🔍 Validation mạnh Pydantic validate input/output
🔄 Async support Xử lý concurrency tốt

3. Cài đặt FastAPI

pip install fastapi uvicorn

4. Hello World với FastAPI

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello FastAPI 🚀"}

Chạy server:

uvicorn main:app --reload

👉 Truy cập:


5. Routing cơ bản

@app.get("/users")
def get_users():
    return ["user1", "user2"]

@app.get("/users/{user_id}")
def get_user(user_id: int):
    return {"user_id": user_id}

6. Query Parameters

@app.get("/items")
def get_items(skip: int = 0, limit: int = 10):
    return {"skip": skip, "limit": limit}

👉 Gọi:

/items?skip=5&limit=20

7. Request Body với Pydantic

from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int

@app.post("/users")
def create_user(user: User):
    return {"user": user}

👉 FastAPI sẽ:

  • Validate input
  • Convert JSON → Python object
  • Auto generate schema

8. Response Model

@app.post("/users", response_model=User)
def create_user(user: User):
    return user

👉 Lợi ích:

  • Control output
  • Hide field nhạy cảm

9. Dependency Injection

FastAPI có DI built-in cực mạnh:

from fastapi import Depends

def get_db():
    return "db_connection"

@app.get("/data")
def get_data(db = Depends(get_db)):
    return {"db": db}

10. Async / Await

@app.get("/async")
async def async_handler():
    return {"message": "async response"}

👉 Khi dùng:

  • DB async (asyncpg)
  • HTTP call (httpx)
  • Worker queue

11. Kết nối Database (SQLAlchemy / SQLModel)

Ví dụ với SQLModel:

from sqlmodel import SQLModel, Field

class User(SQLModel, table=True):
    id: int | None = Field(default=None, primary_key=True)
    name: str

12. Cấu trúc project chuẩn (Best Practice)

app/
├── main.py
├── api/
│   ├── routes/
│   ├── dependencies.py
├── core/
│   ├── config.py
├── models/
├── schemas/
├── services/
├── db/
├── utils/

13. Middleware

from fastapi import Request

@app.middleware("http")
async def log_requests(request: Request, call_next):
    response = await call_next(request)
    return response

14. Authentication (JWT)

from fastapi.security import OAuth2PasswordBearer

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

@app.get("/secure")
def secure_route(token: str = Depends(oauth2_scheme)):
    return {"token": token}

15. Background Tasks

from fastapi import BackgroundTasks

def send_email():
    print("Email sent")

@app.get("/notify")
def notify(background_tasks: BackgroundTasks):
    background_tasks.add_task(send_email)
    return {"status": "processing"}

16. Upload File

from fastapi import File, UploadFile

@app.post("/upload")
def upload(file: UploadFile = File(...)):
    return {"filename": file.filename}

17. Logging & Monitoring

Best practice:

  • Dùng structlog hoặc loguru

  • Kết hợp:

    • Prometheus
    • Grafana
    • Sentry

18. Deploy FastAPI

🚀 Uvicorn + Gunicorn

gunicorn -k uvicorn.workers.UvicornWorker main:app

🚀 Docker

FROM python:3.12

WORKDIR /app
COPY . .

RUN pip install fastapi uvicorn

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

19. FastAPI trong kiến trúc thực tế

Rất phù hợp với:

  • Microservices
  • Event-driven (SQS / Kafka)
  • API Gateway backend
  • AI/ML serving
  • Email processing pipeline (SES → S3 → SQS → FastAPI worker)

20. Khi nào KHÔNG nên dùng FastAPI?

❌ Không phù hợp nếu:

  • Team không quen async
  • System quá đơn giản (Flask đủ dùng)
  • Cần full-stack (Django phù hợp hơn)

21. Tổng kết

👉 FastAPI phù hợp khi bạn cần:

  • Performance cao
  • API chuẩn REST / OpenAPI
  • Scale tốt
  • Clean architecture

👉 Nếu bạn đang build:

  • SCADA system
  • Event-driven email processing
  • Microservice backend

→ FastAPI là lựa chọn rất hợp lý 👍


22. Tài nguyên học thêm



All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí