FastAPI實戰:用GET和POST方法構建RESTful API

FastAPI是一個現代、快速(高性能)的Python Web框架,專爲構建RESTful API設計。它基於標準Python類型提示,自動生成交互式API文檔(Swagger UI和ReDoc),並且支持異步操作,非常適合初學者快速上手。

一、環境搭建

在開始之前,我們需要先安裝FastAPI和一個ASGI服務器(Uvicorn)。打開終端,執行以下命令:

pip install fastapi uvicorn

安裝完成後,我們就可以開始編寫代碼了。

二、第一個GET接口:獲取用戶列表

GET方法用於從服務器獲取資源。這裏我們將創建一個接口,用於返回一個模擬的用戶列表。

代碼示例:

from fastapi import FastAPI

# 創建FastAPI應用實例
app = FastAPI()

# 模擬數據庫數據
users = [
    {"id": 1, "name": "張三", "age": 20},
    {"id": 2, "name": "李四", "age": 25}
]

# 定義GET接口,路徑爲"/users"
@app.get("/users")
def get_users():
    """獲取所有用戶信息"""
    return users  # 返回用戶列表,FastAPI會自動轉爲JSON格式

代碼解釋:

  1. 導入FastAPIfrom fastapi import FastAPI 導入核心框架類。
  2. 創建應用實例app = FastAPI() 實例化FastAPI對象,後續的接口定義都通過這個實例完成。
  3. 模擬數據users 列表模擬數據庫中的用戶數據,便於測試。
  4. 定義GET接口@app.get("/users") 裝飾器指定接口的訪問路徑爲/users,請求方法爲GET。def get_users() 是處理該請求的函數,返回值會自動序列化爲JSON格式返回給客戶端。

效果測試:

運行代碼後,在終端執行:

uvicorn main:app --reload

(注:main是你的Python文件名,app是創建的FastAPI實例名,--reload參數表示代碼修改後自動重啓服務器)

打開瀏覽器訪問 http://localhost:8000/docs,你會看到FastAPI自動生成的交互式API文檔(Swagger UI)。點擊GET /users接口旁的”Try it out”,然後點擊”Execute”,即可看到返回的用戶列表。

三、第二個POST接口:創建新用戶

POST方法用於向服務器提交數據,這裏我們將創建一個接口,接收新用戶的信息並返回創建的用戶。

代碼示例:

from fastapi import FastAPI
from pydantic import BaseModel  # 用於定義請求數據格式

app = FastAPI()

# 模擬數據庫數據
users = [
    {"id": 1, "name": "張三", "age": 20},
    {"id": 2, "name": "李四", "age": 25}
]

# 定義請求數據模型:用戶信息
class UserCreate(BaseModel):
    name: str  # 姓名,字符串類型
    age: int   # 年齡,整數類型

# 定義POST接口,路徑爲"/users"
@app.post("/users")
def create_user(user: UserCreate):
    """創建新用戶"""
    # 生成新用戶ID(假設最大ID+1)
    new_id = max([u["id"] for u in users]) + 1 if users else 1
    new_user = {"id": new_id, **user.dict()}  # **user.dict() 解包字典
    users.append(new_user)
    return new_user  # 返回創建後的用戶信息

代碼解釋:

  1. Pydantic模型UserCreate類繼承自BaseModel,用於定義POST請求需要接收的數據格式。這裏要求必須提供name(字符串)和age(整數),FastAPI會自動驗證輸入數據類型,避免無效數據。
  2. POST接口定義@app.post("/users") 裝飾器指定請求路徑爲/users,方法爲POST。def create_user(user: UserCreate) 中的user: UserCreate表示請求體的數據類型爲UserCreate模型,FastAPI會自動解析請求中的JSON數據並傳入該參數。
  3. 邏輯處理:根據現有用戶的最大ID生成新用戶ID,將新用戶信息添加到users列表中,並返回創建後的用戶。

效果測試:

在Swagger UI中點擊POST /users接口,填寫請求體:

{
  "name": "王五",
  "age": 30
}

點擊”Execute”後,即可看到新用戶被創建並返回。此時再訪問GET /users接口,就能看到王五的信息已被加入列表。

四、總結

通過以上兩個示例,我們完成了一個簡單的RESTful API框架:

  1. GET方法:用於獲取資源(如用戶列表),代碼簡潔,直接返回數據。
  2. POST方法:用於提交數據(如創建新用戶),通過Pydantic模型實現數據驗證,確保輸入格式正確。
  3. FastAPI優勢:自動生成API文檔,無需手動寫文檔;類型提示和數據驗證,減少錯誤;高性能和異步支持,未來可擴展性強。

接下來,你可以嘗試擴展接口:
- 添加路徑參數(如/users/{user_id}獲取單個用戶)
- 實現PUT(更新)和DELETE(刪除)方法
- 結合數據庫(如SQLite)存儲真實數據

FastAPI的學習曲線很平緩,文檔完善且交互式,非常適合作爲API開發的入門框架。現在,動手實踐吧!

小夜