FastAPI 零基礎入門指南:10 分鐘搭建高性能 API

在這里插入圖片描述

一、為什么選擇 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%

八、常見問題

  1. 如何處理跨域請求?
from fastapi.middleware.cors import CORSMiddlewareapp.add_middleware(CORSMiddleware,allow_origins=["*"],allow_credentials=True,allow_methods=["*"],allow_headers=["*"],
)
  1. 如何自定義異常響應?
@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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77373.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77373.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77373.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【算法】BFS-解決FloodFill問題

目錄 FloodFill問題 圖像渲染 島嶼數量 島嶼的最大面積 被圍繞的區域 FloodFill問題 FloodFill就是洪水灌溉的意思,假設有下面的一塊田地,負數代表是凹地,正數代表是凸地,數字的大小表示凹或者凸的程度。現在下一場大雨&…

代碼隨想錄算法訓練營第三十七天|動態規劃part4

1049. 最后一塊石頭的重量 II 題目鏈接: 1049. 最后一塊石頭的重量 II - 力扣(LeetCode) 文章講解: 代碼隨想錄 思路: 理解為把石頭分成兩堆 使得兩堆的差值盡可能小 求這個最小值1 理解為往背包里裝物品 每個物品的…

(八)深入了解AVFoundation-采集:拍照功能的實現

引言 在上一篇文章中,我們初步完成了使用 AVFoundation 采集視頻數據的流程,掌握了 AVCaptureSession 的搭建與視頻流的預覽顯示。 本篇將繼續深入 AVFoundation,聚焦于靜態圖片采集的實現。通過 AVCapturePhotoOutput,我們可以…

git tag使用場景和實踐

背景 每次上線一個迭代,為了區分本次代碼的分支是哪個迭代的commit,可以給分支打上tag,這樣利于追蹤分支所屬迭代,如果devops沒有自動給分支打tag,需要自己來打 操作 1.查看當前tag git tag2.給分支打tag git tag…

從零開始掌握Linux數據流:管道與重定向完全指南

全文目錄 1 知識背景與核心概念1.1 操作系統的輸入輸出模型1.2 Shell 的中間人角色 2 重定向技術深度解析2.1 輸出重定向2.1.1 覆蓋寫2.1.2 追加寫2.1.3 錯誤重定向2.1.4 同時重定向 stdout 和 stderr 2.2 輸入重定向2.2.1 文件作為輸入源2.2.2 Here Document(多行輸…

aws(學習筆記第三十九課) iot-core

文章目錄 aws(學習筆記第三十九課) iotcore(Internet Of Thing)學習內容:1. 整體架構1.1 代碼鏈接1.2 整體架構(概要)1.3 整體架構(詳細 )2. 代碼解析2.1 創建`IOT thing`2.2 創建`AWS IOT certificate`證書2.2.1 創建`lambda`需要的`role`2.2.2 創建`lambda`2.2.3 `lambd…

國家新政鼓勵游戲出海,全球化安全威脅如何解

本文作者:騰訊宙斯盾DDoS防護團隊 01 政策紅利釋放:游戲出海升級為“國家戰略工程” 01 4月21日,國務院新聞辦公室發布《加快推進服務業擴大開放綜合試點工作方案》,釋放了一個信號:首次將“游戲出海”列為戰略級工程&…

MobX 在 React 中的使用:狀態管理的新選擇

🤍 前端開發工程師、技術日更博主、已過CET6 🍨 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 🕠 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 🍚 藍橋云課簽約作者、…

Idea 配置 Git

1、下載Git 下載地址: Git - Downloading Package 2、win 打開 git bash ,配置郵箱和用戶名 //配置郵箱 git config --global user.email "710419844qq.com" //配置全局用戶名 git config --global user.name "smelodys" 3、ide…

Vue3 + OpenLayers 開發教程 (四) 樣式配置與性能優化

1. 地圖樣式基礎概念 1.1 什么是地圖樣式? 地圖樣式是決定地圖要素(點、線、面)如何顯示的重要配置。在 OpenLayers 中,樣式主要包含以下幾個核心組件: Fill(填充):控制面狀要素的…

【Nacos-安全與限流機制健全06 】

文章目錄 Nacos安全機制介紹Nacos代碼實現Nacos限流機制Nacos限流的代碼實現 Nacos安全機制介紹 一、Nacos安全控制機制 Nacos 提供了多種安全控制機制,以保證服務和配置的訪問安全: 身份驗證 (Authentication) Nacos 支持用戶身份驗證來防止未授權的訪…

自建開源遠程協助服務RustDesk —— 筑夢之路

開源項目 # 服務端https://github.com/rustdesk/rustdesk-server.git# 客戶端https://github.com/rustdesk/rustdesk.git 搭建服務端 需要使用的端口、協議 hbbs - RustDesk ID 注冊服務器 hbbr - RustDesk 中繼服務器默認情況下,hbbs 監聽 21115(tcp) , 21…

Jmeter中同步定時器使用注意點

1.設置數量不可大于總線程數量,不然會一直等待 2.設置數量必須與總線程數量成整數倍數,不然還是要一直等。 3.當配置的數量小于線程數時,最好把循環打開,避免最后一次未準備好的線程數量達不到并發數。

作為高速通道光纖傳輸模式怎么理解以及到底有哪些?

光纖的傳輸模式主要取決于光纖的結構(如纖芯直徑和折射率分布),不同模式對應光波在光纖中傳播的不同路徑和電磁場分布。以下是光纖傳輸模式的主要分類及特點: 1. 單模光纖(Single-Mode Fiber, SMF) 核心特點: 纖芯直徑極小(通常為 8-10微米),僅允許光以單一模式(…

小程序Npm package entry file not found?

修改依賴包的入口文件 看是不是cjs,小程序不支持cjs

Android HAL HIDL

1 Android HAL HIDL 1.1 Android中查看有哪些HIDL HAL HIDL是Treble Interface的一部分。 adb root adb shell # lshal 1.2 Android打印C調用棧 #include <utils/CallStack.h> 在需要打印的地方加如下的定義。 android::CallStack stack("oem"); logcat | g…

【AI 加持下的 Python 編程實戰 2_11】DIY 拓展:從掃雷小游戲開發再探問題分解與 AI 代碼調試能力(下)

&#xff08;接 上篇&#xff09; 5 復盤與 Copilot 的交互過程 前面兩篇文章分別涵蓋了掃雷游戲的問題分解和代碼實現過程&#xff0c;不知道各位是否會有代碼一氣呵成的錯覺&#xff1f;實際上&#xff0c;為了達到最終效果&#xff08;如下所示&#xff09;&#xff0c;我…

游戲狀態管理:用Pygame實現場景切換與暫停功能

游戲狀態管理:用Pygame實現場景切換與暫停功能 在開發游戲時,管理游戲的不同狀態(如主菜單、游戲進行中、暫停等)是非常重要的。這不僅有助于提升玩家的游戲體驗,還能使代碼結構更加清晰。本文將通過一個簡單的示例,展示如何使用Pygame庫來實現游戲中的場景切換和暫停功…

Java后端開發day36--源碼解析:HashMap

&#xff08;以下內容均來自上述課程&#xff09; 1. HashMap&#xff08;一&#xff09; 底層&#xff1a;數組鏈表紅黑樹 1.1 前提準備 查看源碼&#xff1a;選中HashMap–ctrlB 小細節&#xff1a;快捷鍵ctrlf12–跳出目錄結構 藍色圓圈&#xff1a;class 證明是類名粉…

RT-Thread學習筆記(四)

RT-Thread學習筆記 線程間同步信號量信號量的使用和管理動態創建信號量靜態創建信號量獲取信號量信號量同步實列互斥量互斥量的使用和管理互斥量動態創建互斥量靜態創建互斥量獲取和釋放互斥量實例事件集事件集的使用和管理動態創建事件集靜態初始化事件集發送和接收事件事件集…