On this page
ประกอบ API จริง end-to-end
รวมทุกอย่างในบทนี้เป็น API ที่มีโครงสร้างดี ปลอดภัย และเทสต์ได้ — ตัวอย่างย่อของ capstone
หัวข้อนี้รวมทุกชิ้นที่เรียนมา (โครงสร้างโปรเจกต์, validation, DB, auth, security, testing) เป็น API ที่ใช้งานได้จริง — เป็นการซ้อมย่อ ๆ ก่อนทำ capstone เต็มในบทสุดท้าย
โครงสร้างโปรเจกต์ API
จัด layout ตามบท 4 แยกส่วนชัดเจน
task-api/
├── README.md
├── requirements.txt
├── .env # secret (อยู่ใน .gitignore)
├── src/
│ └── app/
│ ├── main.py # สร้าง FastAPI app + routes
│ ├── models.py # Pydantic models
│ ├── db.py # เชื่อมฐานข้อมูล
│ └── auth.py # authentication
└── tests/
└── test_api.pyเทสต์ API ด้วย TestClient
FastAPI มี TestClient ให้ยิง request ใส่ app ในเทสต์ได้โดยไม่ต้องสตาร์ท server จริง (เชื่อมบท Testing)
from fastapi.testclient import TestClient
from app.main import app
client = TestClient(app)
def test_create_and_get_item():
# สร้าง
resp = client.post("/items", json={"name": "ปากกา", "price": 15})
assert resp.status_code == 201
item_id = resp.json()["id"]
# อ่านกลับ
resp = client.get(f"/items/{item_id}")
assert resp.status_code == 200
assert resp.json()["name"] == "ปากกา"
def test_get_missing_item():
assert client.get("/items/99999").status_code == 404checklist API ที่ดี
- โครงสร้างแยก layer ชัด (main/models/db/auth) — บท 4, 7
- validate input ทุก endpoint ด้วย Pydantic — บท 2
- ใช้ ? / ORM กัน SQL injection — บท 9
- endpoint ที่ต้องล็อกอินป้องกันด้วย token — auth
- secret อยู่ใน env ไม่ commit — บท 4
- มีเทสต์ครอบ endpoint หลักด้วย TestClient — บท 6
API ตัวนี้รวมแทบทุกบทเข้าด้วยกัน — ในบทสุดท้าย (Capstone) คุณจะทำโปรเจกต์เต็มแบบนี้ตั้งแต่วางแผน เขียน เทสต์ จนถึง deploy
ภาพรวม deploy
เมื่อ API พร้อม ขั้นต่อไปคือนำขึ้น production (เช่น Railway, Render) ซึ่งจะลงรายละเอียดในบท Capstone
สรุปหัวข้อนี้
- API จริง = โครงสร้างแยก layer + validation + DB + auth + security + tests
- TestClient ยิง request ใส่ app ในเทสต์โดยไม่ต้องสตาร์ท server
- ทุกชิ้นมาจากบทก่อน ๆ — บทนี้คือการประกอบร่าง
- เป็นตัวอย่างย่อของ capstone ในบทสุดท้าย
1) สร้าง task API (CRUD) จัดโครงสร้างแยก layer 2) เพิ่ม validation ด้วย Pydantic ทุก endpoint 3) เขียนเทสต์ด้วย TestClient ครอบ create/get/404 4) ตรวจ checklist API ที่ดีว่าโปรเจกต์ทำครบไหม