1.FastAPI是什麼?
FastAPI 是一個現代的、高效能的 Python Web 框架,旨在讓 API 的建置變得快速、簡單。創建者: 塞巴斯蒂安·拉米雷斯 2018年,FastAPI憑藉著出色的效能、出色的開發者體驗和強大的類型提示系統,迅速成為後端API最受歡迎的Python框架。
FastAPI 在背景運行 史塔萊特 (ASGI框架)及使用 派丹提克 用於資料驗證,在許多基準測試中提供與 Node.js 和 Go 相當的速度。
為什麼選擇 FastAPI?
高效能:最快的 Python 框架之一,得益於 Starlette 和 async/await
原生類型提示:使用 Python 類型提示進行自動驗證、序列化和文件記錄
自動記錄:從程式碼自動建立Swagger UI和ReDoc,無需編寫單獨的文檔
開發者經驗:強大的編輯器支援、自動完成、類型檢查有助於減少錯誤
非同步優先:支援原生async/await,適合I/O密集型應用
基於標準:基於OpenAPI(Swagger)、JSON Schema、OAuth2標準
2. FastAPI與其他框架的比較
| 標準 | 快速API | 薑戈 | 燒瓶 | 萊特星 |
|---|---|---|---|---|
| 類型系統 | 本土(Pydantic) | 可選 | 可選 | 本機(屬性/訊息規格) |
| 效能 | 非常高 | 平均 | 平均 | 非常高 |
| 非同步支援 | 本地人 | 部分(Django 5+) | 燒瓶 2+(限量) | 本地人 |
| 自動文件 | 招搖+ReDoc | DRF 壯觀 | 燒瓶-RESTX | 招搖+ReDoc |
| ORM | SQLAlchemy/烏龜 | Django ORM | SQL煉金術 | SQL煉金術 |
| 管理面板 | SQLAdmin/FastAPI-管理 | 內建 | Flask 管理 | 社群 |
| 學習曲線 | 低-中 | 中高 | 低 | 平均 |
| 社群 | 非常大(70k+ ⭐) | 很大 | 很大 | 發展中 |
| 適合 | API、微服務 | 全端、CMS | MVP、小 API | API、企業 |
3.FastAPI架構
FastAPI 建立在三個堅實的基礎上:
┌──────────────────────────────────────────────┐
│ FastAPI Application │
├──────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌───────────┐ │
│ │ Routes │ │ Deps │ │ Models │ │
│ │ (Path │ │ (DI │ │ (Pydantic│ │
│ │ Ops) │ │ System)│ │ V2) │ │
│ └──────────┘ └──────────┘ └───────────┘ │
│ │
├──────────────────────────────────────────────┤
│ Starlette (ASGI) │
│ ┌──────────┐ ┌──────────┐ ┌───────────┐ │
│ │Middleware │ │ Routing │ │ WebSocket │ │
│ └──────────┘ └──────────┘ └───────────┘ │
├──────────────────────────────────────────────┤
│ Uvicorn / Hypercorn (Server) │
└──────────────────────────────────────────────┘
主要成分:
獨角獸:ASGI伺服器,運行FastAPI應用程序,支援HTTP/1.1和WebSocket
史塔萊特:輕量級ASGI框架,提供路由、中間件、WebSocket、後台任務
派丹提克:基於類型提示的資料驗證和序列化
開放API:依照OpenAPI 3.1標準自動產生API文檔
4.FastAPI生態系統
FastAPI 擁有豐富的生態系統,擁有許多支援庫:
| 領域 | 圖書館 | 描述 |
|---|---|---|
| ORM | SQLAlchemy、Tortoise-ORM、SQLModel | Python 的資料庫 ORM |
| 遷移 | 蒸餾器 | 資料庫結構定義遷移 |
| 授權 | python-jose、Passlib、Authlib | JWT、OAuth2、密碼哈希 |
| 快取 | fastapi-cache2、Redis | 回應快取 |
| 任務佇列 | 芹菜、ARQ、SAQ | 後台工作處理 |
| 測試 | pytest、httpx | 測試框架和非同步客戶端 |
| 管理員 | SQLAdmin、FastAPI 管理 | 管理儀表板 |
| 監控 | prometheus-fastapi-instrumentator | 指標和監控 |
5. 使用 FastAPI 實作 Hello World
讓我們來看看最簡單的 FastAPI 應用程式:
# main.py
from fastapi import FastAPI
app = FastAPI(
title="My First API",
description="Learning FastAPI from scratch",
version="1.0.0"
)
@app.get("/")
async def root():
return {"message": "Hello, FastAPI!"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
運行應用程式:
# Cài đặt
pip install fastapi uvicorn
# Chạy development server
uvicorn main:app --reload
# Server sẽ chạy tại http://127.0.0.1:8000
# Swagger UI: http://127.0.0.1:8000/docs
# ReDoc: http://127.0.0.1:8000/redoc
只需幾行程式碼,您就可以:
- 帶有路徑參數的 REST API 端點(
商品編號) 自動驗證為整數 - 查詢參數可選(
q) 帶有類型提示 - 互動式 API 文件 (Swagger UI)
- 替代文檔 (ReDoc)
- 請求/回應的 JSON 架構
6. WSGI 與 ASGI - 為什麼 ASGI 很重要?
了解 WSGI 和 ASGI 之間的差異是理解為什麼 FastAPI 速度快的關鍵:
WSGI(Web 伺服器網關介面)- 傳統
# Flask (WSGI) - synchronous, blocking
@app.route("/data")
def get_data():
result1 = db.query("SELECT ...") # Block - đợi DB
result2 = requests.get("https://api.example.com") # Block - đợi HTTP
return jsonify(result1, result2)
# Tổng thời gian = time(query) + time(http_call)
ASGI(非同步伺服器閘道介面)- 現代
# FastAPI (ASGI) - asynchronous, non-blocking
@app.get("/data")
async def get_data():
result1, result2 = await asyncio.gather(
db.query("SELECT ..."), # Non-blocking
httpx.get("https://api.example.com") # Non-blocking
)
return {"db": result1, "api": result2}
# Tổng thời gian = max(time(query), time(http_call))
借助 ASGI,FastAPI 可以處理數千個並發請求,而無需許多執行緒或進程。
7. 什麼時候該使用FastAPI?
FastAPI 應在下列情況下使用:
- 建構 REST API 或 GraphQL API
- 微服務架構
- 即時應用程式(WebSocket、SSE)
- 機器學習模型服務
- 物聯網後端服務
- 高並發 I/O 密集型應用程式
在以下情況下考慮另一個框架:
- 具有伺服器渲染 HTML 的全端 Web 應用程式 → 薑戈
- CMS、管理繁重的應用程式 → 薑戈
- 快速原型,簡單 API → 燒瓶
- 需要 msgspec 的最大速度 → 萊特星
8. 課程路線圖
在本系列中,我們將學習 20 節課程,分為 5 個部分:
- 第 1 部分:基礎 - Python 基礎、FastAPI 基礎、請求/回應
- 第 2 部分:資料庫 - Pydantic、SQLAlchemy、Alembic、CRUD 和儲存庫模式
- 第 3 部分:安全 - 身份驗證、授權、OAuth2、安全最佳實踐
- 第 4 部分:高級 - 中介軟體、WebSockets、後台任務、快取、非同步深入研究
- 第五部分:生產 - 乾淨的架構、測試、Docker、CI/CD、部署和監控
每節課都有實用的程式碼範例,在本系列結束時,您將擁有足夠的知識來建立可用於生產的 FastAPI 應用程式。
總結
FastAPI 是用於建立 API 的最現代的 Python 框架,將高效能與出色的開發人員體驗相結合。在下一篇文章中,我們將在深入研究 FastAPI 之前回顧必要的 Python 知識。