【FastAPI 學習筆記 EP.8】APIRouter 路由管理

更新 發佈閱讀 8 分鐘

這篇文章將教你如何使用 FastAPI 的 APIRouter 將龐大的 API 專案拆分成獨立、好管理的模組。學會 APIRouter 能讓你避免將成百上千行的程式碼全部擠在 main.py 中,這是開發中大型後端系統的必備技能。

什麼是 APIRouter?

APIRouter 是 FastAPI 用來組織和將路徑操作 (Path Operations) 分組的工具。你可以把它想像成公司裡的「部門主管」,而 FastAPI app 是「執行長」。執行長不需要親自處理每一件瑣事,而是將任務指派給各部門主管 (Router),最後由部門主管統一匯報結果。

APIRouter 基礎概念

1. 建立 Router 實例

你需要先從 fastapi 套件匯入 APIRouter 類別,並建立一個實例物件。這個物件的操作方式與主程式的 app 非常相似。

from fastapi import APIRouter

# 建立一個 router 實例
router = APIRouter()

這段程式碼建立了一個獨立的路由控制器,後續的 API 路徑都會掛載在這個 router 物件上。

2. 使用 Router 定義路徑

在 Router 中定義 API 的方式,是使用 @router.get@router.post 來定義 API,而不是 @app

# 使用 @router 裝飾器,而不是 @app
@router.get("/users/")
async def read_users():
    return [{"username": "Rick"}, {"username": "Morty"}]

3. 設定前綴 (Prefix) 與標籤 (Tags)

為了避免重複寫同樣的路徑開頭(例如 /users),並讓自動生成的 API 文件分類更清楚,可以在建立 APIRouter 時設定參數。

# 設定所有路徑前綴為 /users,並在文件中歸類為 "Users"
router = APIRouter(
    prefix="/users",
    tags=["Users"]
)

@router.get("/") # 實際路徑會變成 /users/
async def read_users():
    return [{"username": "Rick"}]

4. 註冊到主程式

Router 定義好後,必須使用 app.include_router() 將其加入主程式,否則這些路徑無法被外部訪問。

from fastapi import FastAPI

# 假設上面的 router 定義在 user_router 變數中
app = FastAPI()

app.include_router(router)

APIRouter 實作範例

以下範例將「使用者管理」功能獨立出來的情境,請將程式碼想像為分拆成兩個檔案:users.py (子模組) 與 main.py (主程式)。

├── main.py          # 程式進入點
└── routers          # 存放路由的資料夾
    ├── users.py     # 使用者相關 API

1. 建立 routers/users.py

# routers/users.py

from fastapi import APIRouter

# 1. 建立 Router,設定共用前綴與標籤
router = APIRouter(
    prefix="/users",
    tags=["User Management"]
)

# 2. 定義路徑:取得所有使用者
# 實際請求 URL: GET /users/
@router.get("/")
async def get_users():
    return [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]

# 3. 定義路徑:取得特定使用者
# 實際請求 URL: GET /users/me
@router.get("/me")
async def get_current_user():
    return {"id": 1, "name": "Alice", "role": "admin"}

# 4. 定義路徑:取得特定 ID 使用者
# 實際請求 URL: GET /users/{user_id}
@router.get("/{user_id}")
async def get_user_by_id(user_id: int):
    return {"id": user_id, "name": "Guest"}

2. 整合至 main.py

# main.py

from fastapi import FastAPI
from routers import users

app = FastAPI()

# 使用 include_router 將子路由註冊到主程式
app.include_router(users.router)

@app.get("/")
async def root():
    return {"message": "Hello World"}

users.py 專注處理使用者邏輯,完全不需要知道 main.py 的存在。main.py 則作為入口,負責組裝所有的 Router。當你啟動伺服器後,訪問 /users/me 就能正確觸發 users.py 中的函式。

常見錯誤與解決方法

1. 忘記在主程式註冊 Router

常常定義了 Router 卻忘記在 main.py 中引用,導致 API 出現 404 Not Found。

# 錯誤範例 (在 main.py 中漏掉)
app = FastAPI()
# 什麼都沒寫,routers/users.py 裡的 API 永遠不會生效

# 正確範例
from routers import users

app = FastAPI()

app.include_router(users.router) # 必須明確加入這行

2. 在子檔案中錯誤使用 app 實例

在路由檔案中習慣性地建立 app = FastAPI(),這是錯誤的,因為這會建立另一個獨立的應用程式,而非主程式的一部分。

# 錯誤範例 (在 routers/users.py 中)
from fastapi import FastAPI

app = FastAPI() # 錯誤!這裡不該建立新的 app

@app.get("/")   # 錯誤!

def read_users(): ...



# 正確範例
from fastapi import APIRouter

router = APIRouter() # 正確:使用 APIRouter

@router.get("/")     # 正確:使用 router 裝飾器

def read_users(): ...

結語

使用 APIRouter 的重點在於建立 Router 實例、善用 Prefix 來簡化路徑設定、以及在主程式使用 app.include_router,掌握這三點,你就能輕鬆管理 API。

留言
avatar-img
梧笙 WuSheng 的沙龍
65會員
14內容數
⛰️ 梧笙,意即「吾生」,我是一個平凡的理工宅男。 生活離不開 Code 與 Game,這裡主要紀錄與分享: 📖 學習筆記|紀錄我學習過的電腦技能與知識。 💻 科技新知|整理實用工具與科技領域的資訊。 🎮 電玩娛樂|聊聊遊戲動漫與實況直播的話題。 目前更新頻率不固定,有興趣歡迎追蹤。
2025/12/14
這篇文章將教你如何使用 FastAPI 框架,快速建立一個具備新增、讀取、更新、刪除功能的待辦事項 API。
Thumbnail
2025/12/14
這篇文章將教你如何使用 FastAPI 框架,快速建立一個具備新增、讀取、更新、刪除功能的待辦事項 API。
Thumbnail
2025/12/11
這篇文章將教你如何在 FastAPI 中正確攔截並處理錯誤,確保 API 在遇到異常時回傳標準化的 HTTP 狀態碼 (Status Code) 與清晰的錯誤訊息,避免程式無預警崩潰,並讓前端開發者能根據狀態碼精準判斷錯誤類型。
Thumbnail
2025/12/11
這篇文章將教你如何在 FastAPI 中正確攔截並處理錯誤,確保 API 在遇到異常時回傳標準化的 HTTP 狀態碼 (Status Code) 與清晰的錯誤訊息,避免程式無預警崩潰,並讓前端開發者能根據狀態碼精準判斷錯誤類型。
Thumbnail
2025/12/09
這篇文章將教你如何使用 FastAPI 的 Query 與 Path 函式,對 API 的輸入參數進行嚴格的格式驗證,並且為 API 文件添加描述資訊。
Thumbnail
2025/12/09
這篇文章將教你如何使用 FastAPI 的 Query 與 Path 函式,對 API 的輸入參數進行嚴格的格式驗證,並且為 API 文件添加描述資訊。
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」稍微帶大家認識了FastAPI這個框架, 它讓我們快速的架設一個API服務, 並提供了許多標準化功能, 只要照著規範走就能快速的開發出來, 但開發出來之後, 我們會希望開放給一般使用者使用, 而一般使用者較能夠操作的媒介
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」稍微帶大家認識了FastAPI這個框架, 它讓我們快速的架設一個API服務, 並提供了許多標準化功能, 只要照著規範走就能快速的開發出來, 但開發出來之後, 我們會希望開放給一般使用者使用, 而一般使用者較能夠操作的媒介
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」稍微帶大家認識了FastAPI這個框架, 它讓我們快速的架設一個API服務, 並提供了許多標準化功能, 只要照著規範走就能快速的開發出來, 但我們除了能開發出應用之外, 也要設計的更人性化一點, API最重要的就是路由了
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」稍微帶大家認識了FastAPI這個框架, 它讓我們快速的架設一個API服務, 並提供了許多標準化功能, 只要照著規範走就能快速的開發出來, 但我們除了能開發出應用之外, 也要設計的更人性化一點, API最重要的就是路由了
Thumbnail
API是我們與其他系統介接的標準化規格, 那一份好的規格勢必要能夠達到引導與驗證的作用, 避免對方介接錯誤, 引發後續的災難性損失, 因此這一章節就是要教我們如何定義每個API的欄位怎麼填? 資料型態是什麼? 以及如何生成API文件。 我們在「【🔒 Python API框架篇 - Fas
Thumbnail
API是我們與其他系統介接的標準化規格, 那一份好的規格勢必要能夠達到引導與驗證的作用, 避免對方介接錯誤, 引發後續的災難性損失, 因此這一章節就是要教我們如何定義每個API的欄位怎麼填? 資料型態是什麼? 以及如何生成API文件。 我們在「【🔒 Python API框架篇 - Fas
Thumbnail
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」有說明如何使用uvicorn來啟動FastAPI服務, 假設今天我們的API是一個CPU密集型的運算服務時, 通常我們會希望開啟多個行程來幫忙處理, 那麼大致上的撰寫方式會像這樣: app = FastAPI( ti
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」有說明如何使用uvicorn來啟動FastAPI服務, 假設今天我們的API是一個CPU密集型的運算服務時, 通常我們會希望開啟多個行程來幫忙處理, 那麼大致上的撰寫方式會像這樣: app = FastAPI( ti
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」有分享 FastAPI 這套API框架, 那麼當我們想要在應用程式剛執行時就註冊一些事件或者共享GPU運算模型、變數…等,當整個應用程式關閉時也進行釋放作業, 這樣的一個週期循環就是所謂的生命週期, 而在FastAPI這
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」有分享 FastAPI 這套API框架, 那麼當我們想要在應用程式剛執行時就註冊一些事件或者共享GPU運算模型、變數…等,當整個應用程式關閉時也進行釋放作業, 這樣的一個週期循環就是所謂的生命週期, 而在FastAPI這
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News