零基礎學FastAPI:快速理解API開發的核心概念

什麼是API?

想象你用手機上的外賣APP下單,APP需要向餐廳服務器請求“返回菜品列表”“提交訂單信息”,這個“請求-響應”的過程就是API在工作。簡單說,API是不同軟件系統之間“溝通的橋樑”,讓數據能在客戶端(如手機、網頁)和服務器之間安全高效地傳遞。

爲什麼選擇FastAPI?

在Python的Web框架中,FastAPI是個“後起之秀”,但憑藉幾個優勢迅速流行:
- 簡單易用:語法接近Python原生,不需要複雜配置
- 高性能:速度快(性能接近Node.js和Go),適合高併發場景
- 自動文檔:自帶Swagger UI和ReDoc,開發後能立即生成交互式API文檔
- 類型提示支持:結合Python的類型註解,自動生成代碼提示和數據驗證
- 異步友好:支持異步編程,處理長時間任務(如數據庫查詢)更高效

快速入門:安裝與第一個“Hello World”

安裝FastAPI和服務器

首先安裝FastAPI和運行服務器工具Uvicorn:

pip install fastapi uvicorn

編寫第一個接口

創建一個main.py文件,寫入以下代碼:

from fastapi import FastAPI

# 初始化FastAPI應用
app = FastAPI()

# 定義路由和處理函數
@app.get("/")  # 當用戶訪問根路徑"/"時,使用GET方法
def read_root():
    return {"message": "Hello, FastAPI!"}  # 返回JSON格式數據

運行接口

在終端執行:

uvicorn main:app --reload

main:app表示運行main.py文件中的app實例,--reload讓代碼修改後自動重啓。
此時訪問 http://localhost:8000,就能看到返回的 {"message": "Hello, FastAPI!"}

核心概念一:路由與視圖函數

路由就像給接口“貼標籤”——當用戶訪問某個URL時,FastAPI會根據標籤找到對應的“處理函數”(視圖函數)。

例如:

@app.get("/hello")  # 路由路徑爲"/hello",請求方法爲GET
def say_hello():
    return {"message": "Hello, FastAPI!"}

訪問 http://localhost:8000/hello,就會觸發say_hello函數,返回結果。

核心概念二:請求方法(GET/POST等)

不同的請求方法對應不同的業務場景:
- GET:獲取數據(如查詢列表、詳情),參數放在URL中
- POST:提交數據(如新增用戶、上傳文件),參數放在請求體中

GET請求示例(查詢參數)

@app.get("/items/")  # 路徑爲"/items/"
def get_items(limit: int = 10, offset: int = 0):  # 可選參數limit和offset
    return {"limit": limit, "offset": offset}

訪問 http://localhost:8000/items/?limit=20&offset=5,會返回 {"limit": 20, "offset": 5}

POST請求示例(請求體)

POST需要在請求體中提交數據,用Pydantic模型定義數據格式(後續會詳細講):

from pydantic import BaseModel

# 定義數據模型(指定字段類型)
class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = None  # 可選字段

@app.post("/items/")  # POST請求,提交Item數據
def create_item(item: Item):
    return {"item": item.dict(), "message": "Item created!"}

此時向/items/提交JSON數據(如{"name": "手機", "price": 999.99}),FastAPI會自動驗證數據類型並返回結果。

核心概念三:處理請求數據的三種方式

  1. 路徑參數:URL中的動態部分(如/user/{user_id}
   @app.get("/user/{user_id}")
   def get_user(user_id: int):  # user_id是整數類型
       return {"user_id": user_id, "message": f"用戶{user_id}的信息"}
  1. 查詢參數:URL末尾用?分隔的鍵值對(如/search?q=python
   @app.get("/search")
   def search(q: str, page: int = 1):
       return {"query": q, "page": page}
  1. 請求體:複雜數據(如表單、JSON),通過Pydantic模型接收

(見上文POST示例,Item模型會自動解析請求體的JSON數據)

核心概念四:構建響應與狀態碼

返回數據

FastAPI會自動將函數返回的Python數據(如字典、列表)轉爲JSON格式,無需手動序列化。

自定義狀態碼

默認返回200 OK,但可通過status_code參數指定:

from fastapi import status

@app.post("/items/", status_code=status.HTTP_201_CREATED)
def create_item(item: Item):
    return {"item": item}  # 創建成功返回201狀態碼

核心概念五:數據驗證(Pydantic模型)

Pydantic是FastAPI的“數據管家”,通過類型註解自動驗證請求數據:

class User(BaseModel):
    name: str  # 必須是字符串
    age: int  # 必須是整數
    email: str | None = None  # 可選字段,默認None

@app.post("/register/")
def register(user: User):
    if user.age < 18:
        return {"error": "年齡必須≥18"}
    return {"user": user.dict(), "message": "註冊成功"}

若提交數據不合法(如age爲字符串),FastAPI會返回清晰的錯誤提示。

核心概念六:自動API文檔

FastAPI自帶Swagger UI和ReDoc,開發完接口後可直接測試:
- 訪問 http://localhost:8000/docs(Swagger UI,交互式調試界面)
- 訪問 http://localhost:8000/redoc(ReDoc,更美觀的文檔)

這些文檔會自動生成接口說明、參數示例和響應格式,無需手動寫文檔!

總結與下一步

通過以上內容,你已掌握FastAPI的核心基礎:
- 用路由+視圖函數定義接口
- 處理GET/POST等請求方法和數據
- 通過Pydantic驗證數據合法性
- 利用自動文檔快速調試

下一步可以學習:
- 異步接口開發(async def
- 中間件與依賴注入(如數據庫連接、認證)
- 與數據庫集成(SQLAlchemy)

FastAPI簡單且強大,只要多動手寫接口,很快就能熟練掌握!

小夜