一、為什么選擇 FastAPI?
想象一下,用 Python 寫 API 可以像搭積木一樣簡單,同時還能擁有媲美 Go 語言的性能,這個框架憑借三大核心優勢迅速風靡全球:
- 開發效率提升 3 倍:類型注解 + 自動文檔,代碼即文檔
- 性能碾壓傳統框架:異步架構 + UJSON 序列化,QPS 輕松破萬
- 零配置自動化:Swagger UI/ReDoc 文檔、數據驗證、依賴注入開箱即用
二、5 分鐘快速上手
1. 環境準備
# 安裝核心庫
pip install fastapi uvicorn pydantic
2. 第一個 API
# main.py
from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def root():return {"message": "Hello World"}
3. 啟動服務
uvicorn main:app --reload
4. 訪問 API
打開瀏覽器訪問 http://localhost:8000/
,你會看到:
打開瀏覽器訪問 http://localhost:8000/docs
,你會看到交互式 API 文檔:
三、核心功能詳解
1. 路由系統
路徑參數
@app.get("/items/{item_id}")
async def read_item(item_id: int):return {"item_id": item_id}
查詢參數
@app.get("/users")
async def read_users(skip: int = 0, limit: int = 10):return {"users": fake_users_db[skip : skip + limit]}
響應模型
from pydantic import BaseModelclass User(BaseModel):id: intname: str@app.get("/user/{user_id}", response_model=User)
async def get_user(user_id: int):return User(id=user_id, name="Alice")
2. 數據驗證
class Item(BaseModel):name: strprice: floatis_offer: bool = None@app.post("/items/")
async def create_item(item: Item):return {"item_name": item.name, "item_price": item.price}
3. 異步支持
import asyncio@app.get("/async-task")
async def async_task():await asyncio.sleep(1) # 模擬耗時操作return {"result": "Done"}
四、生產級功能
1. 自動文檔
- Swagger UI:訪問
/docs
進行交互式測試 - ReDoc:訪問
/redoc
獲取簡潔文檔 - OpenAPI 規范:自動生成標準接口契約
2. 依賴注入
def get_db():db = Database()try:yield dbfinally:db.close()@app.get("/items/")
async def read_items(db: Database = Depends(get_db)):return db.query("SELECT * FROM items")
3. 中間件
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):start_time = time.time()response = await call_next(request)process_time = time.time() - start_timeresponse.headers["X-Process-Time"] = str(process_time)return response
五、進階技巧
1. 代碼結構優化
myapi/
├── main.py
├── routers/
│ ├── items.py
│ └── users.py
├── models.py
└── schemas.py
2. 性能優化
# 使用orjson加速序列化
from fastapi import FastAPI
from fastapi.responses import ORJSONResponseapp = FastAPI(default_response_class=ORJSONResponse)
3. 測試方案
from fastapi.testclient import TestClientclient = TestClient(app)def test_root():response = client.get("/")assert response.status_code == 200assert response.json() == {"message": "Hello World"}
六、生態工具鏈
工具類型 | 推薦工具 | 核心功能 |
---|---|---|
代碼生成 | fastapi-code-generator | 從 OpenAPI 生成項目骨架 |
調試工具 | httpie | 命令行 API 測試 |
監控 | Prometheus + Grafana | 性能指標可視化 |
部署 | Docker + Kubernetes | 云原生部署 |
七、真實案例
某電商平臺使用 FastAPI 重構商品推薦接口后:
- 日均請求量從 200 萬增至 800 萬
- 響應時間中位數從 420ms 降至 110ms
- 接口聯調周期縮短 60%
八、常見問題
- 如何處理跨域請求?
from fastapi.middleware.cors import CORSMiddlewareapp.add_middleware(CORSMiddleware,allow_origins=["*"],allow_credentials=True,allow_methods=["*"],allow_headers=["*"],
)
- 如何自定義異常響應?
@app.exception_handler(ValueError)
async def value_error_handler(request, exc):return JSONResponse(status_code=400,content={"message": f"Invalid value: {exc}"},)
九、學習資源
- 官方文檔:https://fastapi.tiangolo.com
- Github:https://github.com/fastapi/fastapi