Chuyển đến nội dung chính

第 1 課:介紹 FastAPI - 最現代的 Python 框架

了解 FastAPI 是什麼,與 Django、Flask、Litestar 進行比較。 ASGI 架構、非同步優先、類型提示、自動文件。生態系統和實際用例。

💻 程式設計 — 第 1 課 第 1 課:FastAPI 簡介 - 框架 最先進的Python

Python FastAPI:從基礎到進階

第 1 部分:Python 基礎和 FastAPI

亞洲開發網

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+(限量)本地人
自動文件招搖+ReDocDRF 壯觀燒瓶-RESTX招搖+ReDoc
ORMSQLAlchemy/烏龜Django ORMSQL煉金術SQL煉金術
管理面板SQLAdmin/FastAPI-管理內建Flask 管理社群
學習曲線低-中中高低平均
社群非常大(70k+ ⭐)很大很大發展中
適合API、微服務全端、CMSMVP、小 APIAPI、企業

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 擁有豐富的生態系統,擁有許多支援庫:

領域圖書館描述
ORMSQLAlchemy、Tortoise-ORM、SQLModelPython 的資料庫 ORM
遷移蒸餾器資料庫結構定義遷移
授權python-jose、Passlib、AuthlibJWT、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. 第 1 部分:基礎 - Python 基礎、FastAPI 基礎、請求/回應
  2. 第 2 部分:資料庫 - Pydantic、SQLAlchemy、Alembic、CRUD 和儲存庫模式
  3. 第 3 部分:安全 - 身份驗證、授權、OAuth2、安全最佳實踐
  4. 第 4 部分:高級 - 中介軟體、WebSockets、後台任務、快取、非同步深入研究
  5. 第五部分:生產 - 乾淨的架構、測試、Docker、CI/CD、部署和監控

每節課都有實用的程式碼範例,在本系列結束時,您將擁有足夠的知識來建立可用於生產的 FastAPI 應用程式。

總結

FastAPI 是用於建立 API 的最現代的 Python 框架,將高效能與出色的開發人員體驗相結合。在下一篇文章中,我們將在深入研究 FastAPI 之前回顧必要的 Python 知識。