Python Api Fastapi Tutorial Programming

Python Api Fastapi Tutorial

📅 2026-02-09 | โดย อ.บอม กิตติทัศน์ เจริญพนาสิทธิ์ — SiamCafe.net Since 1997

Python API FastAPI Tutorial คืออะไร / ทำไมถึงสำคัญ

น้องๆ เคยสงสัยมั้ยว่า API (Application Programming Interface) คืออะไร? สมัยผมทำร้านเน็ตฯ ใหม่ๆ API ยังไม่บูมขนาดนี้หรอก แต่พอโลกมันเชื่อมกันหมด การสื่อสารระหว่างโปรแกรมมันสำคัญมากๆ API ก็เหมือนเป็นตัวกลางที่ทำให้โปรแกรมคุยกันได้รู้เรื่อง

FastAPI เนี่ย เป็น Python framework ที่ช่วยให้เราสร้าง API ได้ง่าย เร็ว และดีมากๆ สมัยก่อนกว่าจะทำ API ได้แต่ละที ต้องลง library นู่นนี่นั่น วุ่นวายไปหมด แต่ FastAPI มันจัดการให้หมดแล้ว

ทำไมมันถึงสำคัญ? ก็เพราะว่าทุกวันนี้ application มันซับซ้อนขึ้นเยอะ backend ก็ต้องทำงานหลากหลายมากขึ้น การมี API ที่ดี ทำให้เรา scale ระบบได้ง่าย พัฒนาต่อยอดได้คล่องตัว และที่สำคัญคือมันช่วยประหยัดเวลาของ developer อย่างเราๆ ไปได้เยอะเลยล่ะ

พื้นฐานที่ต้องรู้

Python เบื้องต้น

แน่นอนว่าถ้าจะใช้ FastAPI ได้คล่อง เราต้องมีพื้นฐาน Python ที่ดีพอสมควรนะ พวกตัวแปร data types (int, string, list, dictionary) function class object พื้นฐานพวกนี้ต้องแน่นๆ


def add(x: int, y: int) -> int:
    return x + y

print(add(5, 3)) # Output: 8

Code ข้างบนเป็นตัวอย่าง function ง่ายๆ ใน Python ที่รับ input เป็น integer สองตัว แล้ว return ผลบวกออกมา ลองศึกษาดูนะ ถ้ายังไม่แม่นเรื่อง type hints (x: int, -> int) ไปหาอ่านเพิ่มเติมได้เลย ช่วยให้ code เราอ่านง่ายขึ้นเยอะ

HTTP Protocol

API ส่วนใหญ่ทำงานบน HTTP protocol เพราะฉะนั้นเราต้องเข้าใจ concepts พื้นฐานของ HTTP เช่น methods (GET, POST, PUT, DELETE) status codes (200 OK, 404 Not Found, 500 Internal Server Error) headers พวกนี้สำคัญหมด

ลองนึกภาพเวลาเราเข้าเว็บ เว็บ browser จะส่ง request ไปที่ server โดยใช้ method GET เพื่อขอข้อมูล Server ก็จะ response กลับมาพร้อมข้อมูล และ status code บอกว่าทุกอย่างเรียบร้อยดี (200 OK) หรือมีอะไรผิดพลาด (เช่น 404 Not Found ถ้าเราพิมพ์ URL ผิด)

JSON Data Format

API ส่วนใหญ่มักจะส่งข้อมูลในรูปแบบ JSON (JavaScript Object Notation) เพราะมันอ่านง่ายและโปรแกรมส่วนใหญ่รองรับ JSON หมดแล้ว


{
  "name": "Bom",
  "age": 40,
  "city": "Bangkok"
}

JSON ก็คือ data structure ที่มี key-value pairs คล้ายๆ dictionary ใน Python แต่มี syntax ที่เป็นมาตรฐานกว่า ทำให้ส่งข้อมูลข้ามภาษาได้ง่าย SiamCafe Blog มีบทความเกี่ยวกับ JSON อยู่ ลองไปอ่านเพิ่มเติมได้นะ

วิธีใช้งาน / เริ่มต้นยังไง

FastAPI ใช้งานง่ายมากจริงๆ แค่มี Python กับ pip ก็เริ่มได้เลย สมัยผมทำร้านเน็ตฯ ต้องลงโปรแกรมเยอะแยะกว่าจะเริ่มเขียนโปรแกรมได้ เดี๋ยวนี้มันง่ายขึ้นเยอะเลย

ขั้นตอนปฏิบัติจริง

ติดตั้ง FastAPI และ Uvicorn

ก่อนอื่นเราต้องติดตั้ง FastAPI framework และ ASGI server ชื่อ Uvicorn ก่อน Uvicorn จะทำหน้าที่รัน FastAPI application ของเรา


pip install fastapi uvicorn

เปิด command line หรือ terminal แล้วพิมพ์คำสั่งข้างบน pip จะจัดการ download และติดตั้ง package ให้เราเอง

สร้าง FastAPI Application

สร้างไฟล์ main.py แล้วใส่ code ข้างล่างนี้เข้าไป


from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

Code นี้คือ FastAPI application ที่ง่ายที่สุด มันสร้าง endpoint ที่ root path ("/") และ return JSON response {"Hello": "World"}

รัน FastAPI Application

เปิด command line หรือ terminal แล้วพิมพ์คำสั่งนี้


uvicorn main:app --reload

main คือชื่อไฟล์ Python ของเรา app คือชื่อ FastAPI instance ที่เราสร้างไว้ --reload คือ option ที่ทำให้ server restart เองโดยอัตโนมัติเมื่อเราแก้ไข code

เปิด browser แล้วเข้า http://127.0.0.1:8000 เราก็จะเห็น JSON response {"Hello": "World"}

เพิ่ม Path Parameters

Path parameters คือส่วนของ URL ที่เราใช้ส่งข้อมูลไปให้ API เช่น /items/123 123 คือ path parameter ที่บอกว่าเราต้องการ item ที่มี ID เป็น 123


from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

Code นี้สร้าง endpoint /items/{item_id} โดยที่ {item_id} คือ path parameter ที่เรากำหนดให้เป็น integer (item_id: int) FastAPI จะจัดการ validate ให้เราเองว่า parameter ที่ส่งมาเป็น integer จริงๆ

Query Parameters

Query parameters คือ parameters ที่ต่อท้าย URL ด้วยเครื่องหมาย ? เช่น /items?skip=0&limit=10 skip และ limit คือ query parameters ที่บอกว่าเราต้องการ item ตั้งแต่ index 0 เป็นต้นไป และเอามาแค่ 10 items


from fastapi import FastAPI

app = FastAPI()

@app.get("/items/")
async def read_items(skip: int = 0, limit: int = 10):
    return {"skip": skip, "limit": limit}

Code นี้สร้าง endpoint /items/ โดยมี query parameters skip และ limit ซึ่งมี default value เป็น 0 และ 10 ตามลำดับ ถ้าเราไม่ส่ง query parameters มา FastAPI ก็จะใช้ default values เอง

เปรียบเทียบกับทางเลือกอื่น

FastAPI ไม่ใช่ framework เดียวที่ใช้สร้าง API ได้ ยังมีทางเลือกอื่นๆ อีกเยอะ เช่น Flask, Django REST framework, Node.js Express แต่ละตัวก็มีข้อดีข้อเสียต่างกันไป

Flask เป็น micro-framework ที่ lightweight และ flexible เหมาะสำหรับ project เล็กๆ ที่ไม่ต้องการ features เยอะแยะ Django REST framework เป็น framework ที่ full-featured มี features ครบครัน เหมาะสำหรับ project ใหญ่ๆ ที่ต้องการ scalability และ security ส่วน Node.js Express เป็น framework ที่ใช้ JavaScript เหมาะสำหรับคนที่ถนัด JavaScript และต้องการ build full-stack application

แต่ FastAPI มีข้อดีที่โดดเด่นคือมันเร็วมากๆ (ตามชื่อเลย) และใช้งานง่าย แถมยังมี automatic data validation และ documentation generation อีกด้วย ทำให้มันเป็นตัวเลือกที่ดีสำหรับ project ที่ต้องการ performance และ maintainability

Framework ภาษา ข้อดี ข้อเสีย เหมาะกับ
FastAPI Python เร็ว, ใช้งานง่าย, Automatic validation & documentation อาจจะไม่ full-featured เท่า Django Project ที่ต้องการ performance และ maintainability
Flask Python Lightweight, Flexible ต้อง implement หลายอย่างเอง Project เล็กๆ
Django REST framework Python Full-featured, Scalable, Secure Complexity สูง Project ใหญ่ๆ
Node.js Express JavaScript ใช้ JavaScript, Full-stack development JavaScript ecosystem อาจจะวุ่นวาย Project ที่ใช้ JavaScript เป็นหลัก

ลองพิจารณาดูนะว่า framework ไหนเหมาะกับ project ของน้องๆ มากที่สุด ไม่มี framework ไหนที่ดีที่สุดสำหรับทุกสถานการณ์ SiamCafe Blog มีบทความเปรียบเทียบ framework ต่างๆ อยู่ ลองไปอ่านเพิ่มเติมได้เลย

🎬 วิดีโอแนะนำ

ดูวิดีโอเพิ่มเติมเกี่ยวกับPython Api Fastapi Tutorial:

Best Practices / เคล็ดลับจากประสบการณ์

เอาล่ะน้องๆ มาถึงส่วนที่สำคัญที่สุดแล้ว นั่นก็คือ "ของจริง" ที่พี่เจอมากับตัว สมัยทำร้านเน็ต SiamCafe น่ะ API มันยังไม่ฮิตขนาดนี้หรอก แต่หลักการมันคล้ายๆ กัน สิ่งที่พี่จะบอกต่อไปนี้คือสิ่งที่ช่วยให้ชีวิตเราง่ายขึ้นเยอะ ตอนเขียน API ด้วย FastAPI

เทคนิคที่ 1: Dependency Injection ช่วยชีวิต

Dependency Injection (DI) เนี่ย เหมือนมีคนคอยส่งของที่เราต้องการมาให้ถึงที่ ไม่ต้องเสียเวลาไปหาเอง สมมติว่าเราต้อง connect database ทุกครั้งที่เรียก API แทนที่จะเขียนโค้ด connect ซ้ำๆ กันทุก route เราก็สร้าง function ที่ทำหน้าที่ connect database แล้ว inject เข้าไปใน route ของเรา


from fastapi import Depends, FastAPI
from sqlalchemy import create_engine, Session

DATABASE_URL = "sqlite:///./test.db" # ยกตัวอย่าง SQLite นะ

engine = create_engine(DATABASE_URL)

def get_db():
    db = Session(engine)
    try:
        yield db
    finally:
        db.close()

app = FastAPI()

@app.get("/items/")
async def read_items(db: Session = Depends(get_db)):
    # db คือ Session ที่ inject เข้ามา
    items = db.query(Item).all() # สมมติว่ามี Item model
    return items

เห็นไหม โค้ดเราสั้นลงเยอะ แถมยัง reusable อีกด้วย เวลาเปลี่ยน database ก็แก้แค่ function get_db ที่เดียว จบ!

เทคนิคที่ 2: Validate Data ให้เข้ม

อย่าไว้ใจ input จาก user! สมัยก่อนโดน hack เพราะช่องโหว่นี้เยอะมาก FastAPI ช่วยเราได้เยอะเรื่อง validation โดยใช้ Pydantic model กำหนด data type และ constraint ต่างๆ


from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, validator

class Item(BaseModel):
    name: str
    description: str | None = None
    price: float
    tax: float | None = None

    @validator('price')
    def price_must_be_positive(cls, value):
        if value <= 0:
            raise ValueError('Price must be positive')
        return value

app = FastAPI()

@app.post("/items/")
async def create_item(item: Item):
    # FastAPI จะ validate ให้เอง ถ้าไม่ผ่านจะ throw error
    return item

ถ้า price ติดลบ FastAPI จะ throw HTTPException ให้เอง เราไม่ต้องเขียน if-else ดักเองให้วุ่นวาย

เทคนิคที่ 3: Logging is Your Friend

Logging คือเพื่อนที่ดีที่สุดของโปรแกรมเมอร์ โดยเฉพาะตอน debug API ที่ production สมัยก่อนร้านเน็ตล่มทีนึง หาต้นตอแทบตาย เพราะไม่ได้ log อะไรไว้เลย FastAPI integrate กับ logging library ของ Python ได้ง่ายมาก


import logging
from fastapi import FastAPI

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

app = FastAPI()

@app.get("/ping")
async def ping():
    logger.info("Ping endpoint called")
    return {"message": "pong"}

แค่นี้เราก็รู้แล้วว่า endpoint ไหนถูกเรียกบ้าง เวลา error เกิดขึ้น ก็ดู log หาต้นตอได้ง่ายขึ้น

เทคนิคที่ 4: Error Handling แบบโปร

อย่าปล่อยให้ error หลุดไปเฉยๆ user จะงงว่าเกิดอะไรขึ้น FastAPI มีวิธีจัดการ error ที่สวยงาม โดยใช้ HTTPException


from fastapi import FastAPI, HTTPException

app = FastAPI()

items = {"foo": "The Foo Wrestlers"}

@app.get("/items/{item_id}")
async def read_item(item_id: str):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    return {"item": items[item_id]}

ถ้า item_id ไม่มีใน items FastAPI จะ return HTTP 404 Not Found พร้อม message บอกว่า "Item not found" ทันที

FAQ คำถามที่พบบ่อย

FastAPI เหมาะกับงานแบบไหน?

FastAPI เหมาะกับงานที่ต้องการความเร็ว (fast!) และ performance สูง เช่น API สำหรับ mobile app, web application หรือ microservices นอกจากนี้ยังเหมาะกับงานที่ต้องการความง่ายในการพัฒนา (easy to learn and use)

FastAPI ต่างจาก Flask ยังไง?

Flask เป็น microframework ที่ lightweight และ flexible ส่วน FastAPI เป็น full-featured framework ที่มี feature เยอะกว่า เช่น automatic data validation, dependency injection และ automatic API documentation (Swagger UI) ถ้าโปรเจกต์ใหญ่และซับซ้อน FastAPI จะช่วยให้เราทำงานได้ง่ายขึ้นเยอะ

FastAPI รองรับ database อะไรบ้าง?

FastAPI รองรับ database เกือบทุกชนิดที่ Python รองรับ ไม่ว่าจะเป็น PostgreSQL, MySQL, MongoDB, SQLite หรือแม้แต่ NoSQL database อย่าง Cassandra

Performance ของ FastAPI ดีจริงเหรอ?

FastAPI ถูกออกแบบมาให้มี performance สูงมากๆ โดยใช้ ASGI (Asynchronous Server Gateway Interface) ทำให้สามารถ handle request ได้พร้อมๆ กันจำนวนมาก เหมาะกับงานที่ต้องการ scalability สูง

สรุป

FastAPI เป็น framework ที่น่าสนใจมากๆ สำหรับการพัฒนา API ด้วย Python ด้วยความเร็ว ความง่าย และ feature ที่ครบครัน ทำให้เป็นตัวเลือกที่ดีสำหรับโปรเจกต์ขนาดเล็กไปจนถึงขนาดใหญ่ ลองเอาเทคนิคที่พี่แนะนำไปปรับใช้ดูนะ รับรองว่าชีวิตจะง่ายขึ้นเยอะ!

อย่าลืมแวะไปดู SiamCafe Blog นะน้อง มีบทความดีๆ อีกเยอะเลย

ถ้าสนใจเรื่อง Forex ลองดูที่ iCafeForex ได้นะ