什麼是 FastAPI
FastAPI 是用來建立 Web API 的 Python 框架:接收 HTTP 請求、驗證資料、回傳 JSON,並自動產出符合 OpenAPI 的互動文件。它適合做後端服務、微服務,以及機器學習模型的推論 API。
它解決什麼問題
傳統用 Flask 寫 API 時,驗證、文件與型別常常各寫一套:函式參數是一套、手動檢查是一套、Swagger 註解又是一套。三處不一致時,前端對接與除錯成本會立刻上升。
FastAPI 的做法是:用標準 Python 型別提示當唯一來源。你宣告 item_id: int 或一個 Pydantic 模型,框架就同時負責:
- 把網路上的字串轉成 Python 型別
- 驗證失敗時回傳清楚的錯誤
- 讓編輯器知道欄位名稱與型別
- 產生 OpenAPI schema 與
/docs
少寫重複程式,也就少一批「文件跟程式對不起來」的 bug。
核心特色
官方強調的重點可以記成四句:
- 快:效能接近 Node.js / Go 這一級的 Python 框架,底層是 Starlette 與 Pydantic。
- 好寫:型別提示帶來補齊與檢查,開發速度通常明顯比手寫驗證快。
- 穩:驗證與自動文件讓常見輸入錯誤在進業務邏輯前就被擋下。
- 跟標準走:相容 OpenAPI 與 JSON Schema,前端、SDK 產生器都能直接用。
它站在兩個函式庫上:
| 函式庫 | 負責什麼 |
|---|---|
| Starlette | ASGI 網頁層:路由、中介軟體、WebSocket、測試用戶端 |
| Pydantic | 資料層:驗證、序列化、設定管理 |
你幾乎不必直接操作這兩者,但知道分工後,遇到「這是路由問題還是資料問題」會比較好查。
什麼時候該用它
適合:JSON API、需要清楚合約的前後端分離、要把模型或資料管線包成 HTTP 服務。
不適合硬套的情境:以伺服器端渲染 HTML 為主的傳統網站(Django 仍更完整)、完全不需要 HTTP 的批次腳本。若你在做命令列工具,官方建議看它的姊妹專案 Typer。
進一步學習
- FastAPI 官方首頁:特色、安裝與最小範例。
- 繁體中文:FastAPI 是什麼:同一份內容的中文版。
- Learn:官方建議的完整學習入口。
- Starlette 與 Pydantic:想追到底層時再讀。
- 想先聽原作者怎麼定位這個框架:見 影音教學。