Python Web 開發新霸主:FastAPI 快速入門 (第 36 章)

站主自己的課程,請大家支持
揭秘站長的架站心法:如何利用 Hugo × AI 打造高質感個人品牌網站? 揭秘站長的架站心法:如何利用 Hugo × AI 打造高質感個人品牌網站?
  • Post by
  • Jan 19, 2024
post-thumb

在 Python Web 領域,長久以來是 Flask (輕量級) 與 Django (全功能) 的天下。但自從 FastAPI 出現後,它以驚人的速度席捲了整個社群。

為什麼?

  1. :基於 Starlette 和 Pydantic,效能與 Go/Node.js 並駕齊驅。
  2. 現代:原生支援 async 和 Type Hints。
  3. 自動文件:寫完程式,Swagger API 文件就自動產生了!

1. 安裝

你需要安裝 FastAPI 和一個 ASGI Server (如 Uvicorn)。

pip install fastapi "uvicorn[standard]"

2. Hello World

建立一個 main.py

from fastapi import FastAPI

app = FastAPI()

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

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
    # item_id 自動轉型為 int
    # q 是選填的 Query Parameter (str 或 None)
    return {"item_id": item_id, "q": q}

執行伺服器: uvicorn main:app --reload

  • --reload: 程式碼修改後自動重啟 (開發模式)。

打開瀏覽器訪問 http://127.0.0.1:8000,你會看到 JSON 回應 {"Hello": "World"}

這就是 FastAPI 的魔力:你回傳 Dict,它自動幫你轉成 JSON

3. 自動互動式文件

FastAPI 最殺手級的功能是自動文件。

直接訪問 http://127.0.0.1:8000/docs

你會看到一個漂亮的 Swagger UI 介面,列出了所有 API。你甚至可以直接在網頁上點擊 “Try it out” 測試你的 API,完全不需要寫額外的文件!

4. 路徑參數與查詢參數

Path Parameters (路徑參數)

在 URL 路徑中的變數,例如 /items/5

@app.get("/users/{user_id}")
async def read_user(user_id: int):
    return {"user_id": user_id}

FastAPI 會自動驗證 user_id 是否為整數,如果不是 (例如 /users/abc),它會幫你回傳 422 錯誤訊息。

Query Parameters (查詢參數)

在函式參數中宣告,但不在 path 中,例如 /items/?skip=0&limit=10

@app.get("/items/")
async def read_items(skip: int = 0, limit: int = 10):
    return fake_items_db[skip : skip + limit]

5. 總結

FastAPI 讓寫 API 變得即使是新手也能寫出高效能、型別安全且文件齊全的服務。

下一章,我們將介紹 FastAPI 的好搭檔——Pydantic,看看它是如何透過 Type Hints 進行超強大的資料驗證!


延伸閱讀

LATEST POST
TAG