Notes & software courses · Free to learn
Aph's Blog
On this page

ประกอบ API จริง end-to-end

👋 อ่านฟรีทั้งหมดบน Aph's Blog — เนื้อหาภาษาไทย ทำตามทีละหน้าใน sidebar ได้เลย หากมีข้อเสนอแนะหรืออยากให้เพิ่มหัวข้อไหน บอกได้เสมอ

รวมทุกอย่างในบทนี้เป็น 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)

python
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 == 404

checklist 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
นี่คือตัวอย่างย่อของ Capstone

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 ที่ดีว่าโปรเจกต์ทำครบไหม