Học Python 3 từng bước và dự án mẫu FastAPI
Step-by-step Python 3, then a sample project: the Mini Places API
Từ cài đặt và những dòng code đầu tiên, qua cấu trúc dữ liệu, hàm, lỗi, kiểu dữ liệu, async và test, đến việc xây một API hoàn chỉnh bằng FastAPI. Mỗi bước có code sao chép được, thử thách nhỏ và lỗi thường gặp.
Bắt đầu học PythonXem dự án FastAPILộ trình Cơ bản · Beginner
Hai mươi bước chia thành bốn giai đoạn. Màu xanh dương và vàng là Python, màu xanh ngọc là FastAPI.
Vì sao Python?
Why Python
Cú pháp gần với ngôn ngữ tự nhiên, thư viện chuẩn phong phú, dùng được cho web, dữ liệu, tự động hóa và AI.
Môi trường ảo
Virtual environment
Mỗi dự án có một thư mục thư viện riêng (.venv) để các dự án không giẫm lên nhau.
Vì sao FastAPI?
Why FastAPI
Dùng type hints chuẩn của Python để tự kiểm tra dữ liệu và tự sinh tài liệu API tương tác.
Bản đồ kiểu dữ liệu Core types at a glance
| Kiểu | Ví dụ | Có thứ tự | Thay đổi được | Cho phép trùng |
|---|---|---|---|---|
| list | [1, 2, 2] | Có | Có | Có |
| tuple | (1, 2) | Có | Không | Có |
| dict | {"a": 1} | Theo thứ tự thêm vào | Có | Khóa không trùng |
| set | {1, 2} | Không | Có | Không |
| str, int, float, bool | "abc", 3 | str có | Không | - |
Python Step Navigator Tương tác · Interactive
Mười hai bước. Bấm vào từng bước để xem giải thích, code, thử thách và lỗi thường gặp.
Đoán kết quả Predict the output
Đọc code, đoán kết quả, rồi kiểm tra. Luyện đọc code là kỹ năng nền tảng.
Kế hoạch học Study planner
Số giờ mỗi bước chỉ là ước tính tham khảo cho người mới, hãy tự điều chỉnh.
Dự án mẫu: Mini Places API FastAPI
API quản lý địa điểm: thêm, xem, tìm, xóa địa điểm, và một quy trình duyệt dữ liệu nhập vào (pending, approved hoặc rejected). Dữ liệu nhập chưa được duyệt thì không hiện ra API công khai.
Vòng đời một request Request lifecycle
Kiến trúc các lớp Layered structure of the project
Trạng thái một ứng viên import Import candidate state machine
HTTP, CRUD và mã trạng thái Methods and status codes
| Phương thức | Dùng để | Mã thường trả về | Ví dụ trong dự án |
|---|---|---|---|
| GET | Đọc | 200, 404 | GET /places/1 |
| POST | Tạo mới, hoặc thực hiện một hành động | 201, 409, 422 | POST /places |
| PUT / PATCH | Cập nhật toàn bộ hoặc một phần | 200, 404, 422 | Bài tập mở rộng |
| DELETE | Xóa | 204, 404 | DELETE /places/1 |
200 thành công, 201 đã tạo, 204 thành công không có nội dung, 404 không tìm thấy, 409 xung đột trạng thái, 422 dữ liệu gửi lên không hợp lệ.
Sân chơi API (mô phỏng) API playground simulation
Đây là mô phỏng chạy ngay trong trình duyệt để bạn thấy mã trạng thái và phản hồi của Mini Places API, không phải server thật. Hãy thử theo thứ tự các nút mẫu, rồi tự sửa.
Chuyên sâu Advanced
Những chủ đề đưa dự án từ bài tập lên mức dùng thật.
def hay async def?
Sync vs async endpoints
Dùng async def khi bên trong bạn await các thư viện bất đồng bộ. Hàm def thường được FastAPI chạy trong thread pool, nên gọi code chặn (blocking) trong def là chấp nhận được. Gọi code chặn bên trong async def sẽ làm đứng cả event loop.
Dependency Injection
Depends
Khai báo thứ endpoint cần (session cơ sở dữ liệu, người dùng hiện tại, tham số phân trang) bằng Depends. Dễ tái sử dụng và dễ thay thế khi test (dependency_overrides).
Cấu hình qua môi trường
Settings
Không ghi cứng chuỗi kết nối hay khóa bí mật. Dùng biến môi trường hoặc file .env với pydantic-settings, và đừng commit file bí mật.
Xác thực
Authentication
Các endpoint /admin/... trong bài mẫu chưa có bảo vệ. Thực tế cần đăng nhập (ví dụ OAuth2 với JWT) và phân quyền để chỉ admin duyệt được dữ liệu.
CORS
Cross-origin requests
Khi frontend ở domain khác, trình duyệt chặn nếu server không cho phép. Chỉ liệt kê những origin cần thiết, tránh dùng dấu * ở môi trường thật.
Migration
Schema changes
create_all phù hợp để học. Khi dữ liệu đã có thật, dùng công cụ migration (ví dụ Alembic) để thay đổi bảng an toàn.
Mã mẫu mở rộng Snippets for the next level
Trong Dockerfile hãy dùng phiên bản Python mà dự án và các thư viện của bạn hỗ trợ.
Checklist trước khi triển khai Production checklist
| Hạng mục | Cần làm |
|---|---|
| Bảo mật | Xác thực và phân quyền cho /admin, che khóa bí mật, giới hạn CORS, kiểm tra đầu vào |
| Dữ liệu | Chuyển từ SQLite sang cơ sở dữ liệu máy chủ, dùng migration, có sao lưu |
| Chất lượng | Test cho từng endpoint, chạy test tự động trong CI, kiểm tra kiểu dữ liệu |
| Vận hành | Ghi log, theo dõi lỗi, endpoint /health, chạy bằng fastapi run hoặc Uvicorn trong container |
| Hợp đồng API | Đặt phiên bản, phân trang, mã lỗi thống nhất, tài liệu OpenAPI luôn cập nhật |
Bài tập mở rộng Next challenges
Từ vựng Anh – Việt Vocabulary
Mười sáu thuật ngữ, kèm câu ví dụ.
| English | Tiếng Việt | Example |
|---|
Mini game: Lập trình viên Python tập sự Review · Ôn tập
Mười câu hỏi. Trả lời đúng được 10 điểm, trả lời đúng liên tiếp được thêm điểm thưởng.