0

FastAPI: API đầu tiên của bạn đạt chuẩn sản xuất

Bạn đã từng cảm thấy việc xây dựng API phức tạp hơn mức cần thiết chưa? Bạn không đơn độc đâu! Nhiều lập trình viên phải vật lộn với mã mẫu rườm rà và cấu hình rối rắm. FastAPI ra đời như một framework web hiện đại, hiệu suất cao để xây dựng API bằng Python 3.7+, và quan trọng là nó rất thú vị khi sử dụng. Hướng dẫn này sẽ giúp bạn tạo ra ứng dụng FastAPI đầu tiên đạt chuẩn sản xuất, ngay cả khi bạn là người mới bắt đầu.

Điều gì khiến FastAPI đặc biệt?

Tại sao lại chọn FastAPI thay vì các framework như Flask hoặc Django REST Framework? FastAPI có một số ưu điểm nổi bật:

  • Tốc độ: Dựa trên Starlette và Pydantic, FastAPI mang lại hiệu suất cực cao, tương đương với NodeJS và Go.
  • Tự động kiểm tra dữ liệu: Pydantic đảm nhiệm việc kiểm tra và tuần tự hóa dữ liệu, giảm thiểu lỗi và đơn giản hóa mã nguồn.
  • Tự động tạo tài liệu API: FastAPI tạo tài liệu API tương tác (sử dụng Swagger UI và ReDoc) hoàn toàn tự động, giúp dễ dàng kiểm thử và khám phá API.
  • Type Hints: Tận dụng gợi ý kiểu dữ liệu trong Python để cải thiện khả năng đọc và bảo trì mã.
  • Dependency Injection: Mô hình thiết kế mạnh mẽ tích hợp sẵn, giúp đơn giản hóa việc test và tổ chức mã.

Hãy cùng tạo một API “Việc cần làm” đơn giản để minh họa các tính năng này.

Cài đặt môi trường phát triển

Trước khi viết mã, hãy thiết lập môi trường làm việc. Bạn nên sử dụng môi trường ảo để cô lập các thư viện phụ thuộc của dự án.

1. Tạo môi trường ảo

python3 -m venv venv

2. Kích hoạt môi trường ảo

Trên macOS/Linux:

source venv/bin/activate

Trên Windows:

venv\Scripts\activate

3. Cài đặt FastAPI và Uvicorn

Uvicorn là server ASGI sẽ được dùng để chạy ứng dụng FastAPI.

pip install fastapi uvicorn

✅ Lưu ý: Môi trường ảo giúp cách ly thư viện của dự án, tránh xung đột. Hãy luôn kích hoạt nó trước khi làm việc.

Xây dựng API Endpoint đầu tiên

Giờ là phần thú vị! Hãy tạo một endpoint API đơn giản trả về danh sách các việc cần làm. Tạo file main.py và thêm đoạn mã sau:

from fastapi import FastAPI
from typing import List
from pydantic import BaseModel

# Define a data model for a to-do item
class Todo(BaseModel):
    id: int
    task: str
    completed: bool = False

# Create a FastAPI app instance
app = FastAPI()

# Sample to-do data
todos = [
    Todo(id=1, task="Learn FastAPI", completed=True),
    Todo(id=2, task="Build a to-do API", completed=True),
    Todo(id=3, task="Deploy the API", completed=False),
]

# Define a GET endpoint to retrieve all to-do items
@app.get("/todos", response_model=List[Todo])
async def get_todos():
    """Retrieves all to-do items."""
    return todos

# Define a POST endpoint to create a new to-do item
@app.post("/todos", response_model=Todo)
async def create_todo(todo: Todo):
    """Creates a new to-do item."""
    todos.append(todo)
    return todo

Giải thích:

  • Import: Nhập FastAPI, List, và BaseModel từ các module tương ứng.
  • Todo Model: Là một model Pydantic để kiểm tra và xác định kiểu dữ liệu.
  • App Instance: Tạo thể hiện ứng dụng FastAPI.
  • Dữ liệu mẫu: Danh sách việc cần làm lưu trữ tạm thời trong bộ nhớ.
  • GET Endpoint: Trả về toàn bộ danh sách.
  • POST Endpoint: Kiểm tra và thêm việc mới vào danh sách.

✅ Mẹo: FastAPI tận dụng type hints để vừa tăng tính rõ ràng trong mã, vừa cho phép kiểm tra dữ liệu tự động và tạo tài liệu API.

Chạy ứng dụng API

Để khởi chạy ứng dụng FastAPI, chạy lệnh sau:

uvicorn main:app --reload

Trong đó:

  • main: tên file (bỏ đuôi .py)
  • app: tên biến ứng dụng FastAPI
  • --reload: tự động restart server khi mã thay đổi (hữu ích trong phát triển)

Truy cập:

  • ➡️ http://127.0.0.1:8000/docs — Swagger UI
  • ➡️ http://127.0.0.1:8000/redoc — ReDoc

✅ Lưu ý: uvicorn dùng để chạy FastAPI. Tham số --reload chỉ nên dùng trong môi trường phát triển, tránh dùng trong production.

Kết luận

Trong hướng dẫn này, bạn đã học cách tạo một API đơn giản nhưng mạnh mẽ với FastAPI. Bạn thấy cách FastAPI tận dụng type hints, Pydantic và hệ thống tài liệu tự động để tối ưu hóa quy trình phát triển.


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í