本單元參考 FastAPI 官方教學,從回傳第一個 JSON 回應開始,逐步練習路徑與查詢參數、請求資料驗證,以及可測試的 RESTful API。
- 使用 Python 型別註記描述輸入與輸出,框架會驗證資料並在格式錯誤時回傳清楚的錯誤訊息。
- 自動產生符合 OpenAPI 的互動式文件;啟動後可在
/docs測試 API,也可在/redoc閱讀文件。 - 可用一般函式或
async def撰寫端點,適合逐步從 Python 程式延伸為 Web API。
| 檔案 | 學習重點 |
|---|---|
hello.py |
第一個路由與 JSON 回應 |
parameters.py |
型別化的路徑與查詢參數 |
media_api.py |
Pydantic 模型、驗證、狀態碼與小型多媒體目錄 API |
test_media_api.py |
以 TestClient 測試 API 行為 |
需要 Python 3.10 以上版本。
cd 14.FastAPI
uv venv
uv pip install -r requirements.txtcd 14.FastAPI
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS/Linux
source .venv/bin/activate
python -m pip install -r requirements.txt啟動 hello.py:
fastapi dev hello.py在瀏覽器開啟 http://127.0.0.1:8000/,會得到:
{"message":"Hello, FastAPI!"}同時開啟 http://127.0.0.1:8000/docs。FastAPI 會依 @app.get("/") 與函式的型別註記建立可操作的 API 文件,不必另外手寫 Swagger UI。
改為啟動第二個範例:
fastapi dev parameters.py試著在瀏覽器開啟下列網址:
http://127.0.0.1:8000/media/7
http://127.0.0.1:8000/media/7?media_type=video
media_id: int 會把路徑參數轉成整數;若輸入不是整數,FastAPI 會回傳 422 驗證錯誤。media_type 是可省略的查詢參數,並限制長度最多 20 個字元。
media_api.py 使用 MediaCreate 描述 POST 請求內容,並用 Literal 將媒體類型限制為 image、audio 或 video。啟動它:
fastapi dev media_api.py先讀取範例資料:
curl http://127.0.0.1:8000/media再新增一筆影片資料:
curl -X POST http://127.0.0.1:8000/media \
-H "Content-Type: application/json" \
-d '{"title":"期末成果影片","media_type":"video"}'成功時會取得 201 Created 與自動配發的 id。在 /docs 的 POST /media 區塊也可直接輸入 JSON 測試;嘗試空白標題或不支援的 media_type,即可觀察自動產生的 422 驗證結果。
範例將資料保存在記憶體中,伺服器重啟後會重設,目的是聚焦於 API 設計與驗證。下一步可將資料儲存邏輯改為 SQLite 或其他資料庫。
TestClient 不需要另開伺服器,即可在 Python 內送出測試請求:
pytest -q測試涵蓋讀取、篩選、新增、找不到資料時的 404,以及不合法請求資料的 422。
- 為
media_api.py加入更新與刪除端點。 - 將記憶體資料替換為 SQLite,並為每個端點增加測試。
- 閱讀官方的安全性與部署章節,再將服務部署到可控的環境。