Query String

查詢字串參數是 URL 中 ? 後面的鍵值對組合,常用於前端傳遞資料給後端,例如篩選條件、分頁數字或搜尋關鍵字。


查詢參數格式

基本格式如下:

?key1=value1&key2=value2

範例:

/search?q=fastapi&page=2

代表:搜尋字串為 fastapi,頁數為第 2 頁。


FastAPI 中使用查詢參數

使用查詢參數時,不需要在路由中宣告變數,而是直接於函式參數中設定。

from fastapi import FastAPI

app = FastAPI()

@app.get("/search")
def search(q: str, page: int = 1):
    return {"query": q, "page": page}

呼叫:


預設值與選擇性參數

可以為參數指定預設值,使其變為「非必要參數」。

呼叫 /products 將回傳 {"category": "all"}


多參數處理與類型驗證

FastAPI 自動根據型別進行驗證與轉換,例如:

呼叫 /sum?a=10&b=20 → 回傳 {"sum": 30}。 如果輸入 /sum?a=ten&b=20 將回傳錯誤。


使用 Annotated 與 Query 進行進階驗證

FastAPI 提供 AnnotatedQuery 搭配使用進行更嚴謹的參數限制與描述。

說明:

  • min_lengthmax_length:限制字串長度

  • ge(greater or equal)、le(less or equal):數值範圍限制

  • 可搭配 description="..." 供自動文件顯示


使用 Annotated 與 Path 進行路由參數驗證

說明:

  • Path(...) 用於限制路由變數的範圍與型別

  • 常用的條件:ge(>=)、le(<=)、description


路由參數 vs 查詢參數

路由參數(Path Parameters):

定義於 URL 路徑中,必須提供,不可省略。

呼叫:/users/123{"user_id": 123}


路由參數 + 查詢參數同時使用

呼叫:/users/42/orders?limit=10{"user": 42, "limit": 10}


小結

類型
範例
用途

路由參數

/item/123

對應資源主鍵,必要參數

查詢參數

/search?q=ai&page=2

選擇性篩選與條件

同時使用

/user/5/orders?limit=10

複合資源 + 額外條件

Annotated 結合

Path / Query 進階驗證

提供型別、長度、範圍控制

查詢參數與路由參數是 Web API 的核心資料傳遞方式,使用 FastAPI 的 Annotated 機制可提升程式的清晰度與安全性,適合撰寫可維護性高的服務端程式碼。

Last updated