Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
FastAPI là framework Python hiện đại cho phép bạn viết API chỉ với vài dòng code, đồng thời tự sinh tài liệu tương tác và kiểm tra dữ liệu. Nhờ type hint của Python, nhiều việc nhàm chán như parse và validate được làm thay bạn.
pip install fastapi "uvicorn[standard]"# main.pyfrom fastapi import FastAPIapp = FastAPI()@app.get("/")def home(): return {"message": "Xin chào FastAPI"}@app.get("/items/{item_id}")def read_item(item_id: int, q: str | None = None): return {"item_id": item_id, "q": q}Chạy bằng uvicorn main:app --reload. Mở /docs trong trình duyệt, bạn sẽ thấy giao diện Swagger UI để thử API ngay; còn /redoc là một kiểu tài liệu khác. Tất cả được sinh từ code của bạn.
Chú ý item_id: int: nếu ai đó gọi /items/abc, FastAPI tự trả lỗi 422 với mô tả rõ ràng, bạn không phải viết gì thêm.
Với body JSON, bạn khai báo một model Pydantic:
from pydantic import BaseModel, Fieldclass ItemIn(BaseModel): name: str = Field(min_length=1, max_length=100) price: float = Field(gt=0) tags: list[str] = []class ItemOut(BaseModel): id: int name: str price: float@app.post("/items", response_model=ItemOut, status_code=201)def create_item(item: ItemIn): return {"id": 1, "name": item.name, "price": item.price}Tham số response_model lọc dữ liệu trả về đúng theo ItemOut, tránh vô tình lộ trường nhạy cảm như mật khẩu băm. Model vào và model ra tách riêng là thói quen tốt.
Cơ chế Depends cho phép chia sẻ logic như lấy kết nối database hay người dùng hiện tại:
from fastapi import Depends, HTTPExceptiondef get_current_user(token: str = Depends(oauth2_scheme)): user = decode_token(token) # hàm tự viết if not user: raise HTTPException(status_code=401, detail="Token không hợp lệ") return user@app.get("/me")def me(user = Depends(get_current_user)): return userCách này giúp code các endpoint ngắn gọn, và khi kiểm thử bạn có thể ghi đè dependency bằng bản giả.
Bạn có thể khai báo endpoint bằng def hoặc async def. Quy tắc dễ nhớ:
async def khi bên trong bạn await các thư viện bất đồng bộ (như driver database async, httpx).def thường nếu gọi thư viện chặn (blocking); FastAPI sẽ chạy nó trong một nhóm luồng để không chặn event loop.async def, vì nó sẽ làm đứng cả server.Ưu điểm: hiệu năng tốt trong nhóm framework Python, tài liệu tự động, kiểm tra dữ liệu mạnh, dễ học nếu bạn đã quen type hint. Hạn chế: FastAPI chỉ lo phần API, nên các thứ như ORM, quản trị, xác thực đầy đủ bạn phải tự chọn và ghép (SQLAlchemy, Alembic...). Với dự án cần sẵn trang quản trị và ORM tích hợp, Django có thể nhanh hơn để bắt đầu.
Sau khi chạy được ví dụ trên, hãy thử thêm một kho dữ liệu thật bằng SQLAlchemy, viết vài test với TestClient của FastAPI, và đóng gói bằng Docker. Ba bước đó đủ để biến bản thử nghiệm thành dịch vụ có thể triển khai.
FastAPI đi kèm TestClient giúp gọi endpoint trong test mà không cần chạy server thật:
from fastapi.testclient import TestClientfrom main import appclient = TestClient(app)def test_read_item(): r = client.get("/items/5?q=abc") assert r.status_code == 200 assert r.json() == {"item_id": 5, "q": "abc"}Khi triển khai, người ta thường chạy Uvicorn đứng sau một reverse proxy như Nginx, hoặc dùng Gunicorn với worker của Uvicorn để chạy nhiều tiến trình. Đóng gói bằng Docker giúp môi trường chạy nhất quán giữa máy bạn và máy chủ. Đừng quên đặt cấu hình nhạy cảm (khóa bí mật, chuỗi kết nối) vào biến môi trường thay vì ghi cứng trong code, và bật HTTPS ở lớp proxy.
Hãy tách code thành nhiều file thay vì dồn tất cả vào main.py: dùng APIRouter để nhóm endpoint theo tài nguyên, thư mục riêng cho schema, và một lớp truy cập dữ liệu độc lập. Đặt tên endpoint theo danh từ số nhiều như /items, dùng đúng mã trạng thái HTTP (201 khi tạo mới, 204 khi xóa thành công, 404 khi không tìm thấy) và luôn mô tả các tham số bằng Field hoặc Query để tài liệu tự sinh có đủ thông tin. Một API được ghi chú tốt gần như không cần viết tài liệu riêng, đây chính là sức mạnh thật sự của FastAPI.
Hãy luôn kiểm tra lại bằng thực hành thay vì chỉ đọc lý thuyết: dựng một dự án nhỏ, cố tình tạo lỗi, quan sát log và công cụ gỡ lỗi, rồi sửa. Với FastAPI, hãy dành thời gian đọc phần tài liệu về dependency và bảo mật, vì chúng là nền tảng để xây hệ thống xác thực sạch sẽ.
FastAPI cho bạn năng suất cao với ít code, miễn là bạn dùng type hint đầy đủ. Hãy thử xây một API quản lý ghi chú và mở /docs để thấy thành quả ngay lập tức.
Muốn học bài bản và có lộ trình rõ ràng? Bạn có thể xem các khóa học trên codebem.com.
Nguyễn Đình Cường
0 comment