什么是 FastAPI?

FastAPI 是一個(gè)基于 Python 的 高性能 Web 框架,專注于快速構(gòu)建 API 服務(wù)。它的設(shè)計(jì)目標(biāo)是:

  1. 快速:用最少的代碼實(shí)現(xiàn)高效的 API 服務(wù)。
  2. 現(xiàn)代化:充分利用 Python 的類型注解和異步編程,讓開(kāi)發(fā)更簡(jiǎn)單。
  3. 自動(dòng)化:內(nèi)置 Swagger 文檔和數(shù)據(jù)驗(yàn)證,無(wú)需額外配置。
  4. 高性能:基于 Starlette 和 Pydantic,性能媲美 Node.js 和 Go。

一句話概括:FastAPI 是為高性能、高效率、高可讀性 API 開(kāi)發(fā)而生的框架。


為什么選擇 FastAPI?

以下是 FastAPI 相比其他框架(如 Flask、Django Rest Framework)的優(yōu)勢(shì):

1. 高性能

FastAPI 基于 ASGI(Asynchronous Server Gateway Interface),支持異步編程,性能極高。其響應(yīng)速度和吞吐量可媲美 Node.js 和 Go。

2. 類型安全

FastAPI 利用了 Python 的類型注解,讓代碼更加安全、清晰。例如,參數(shù)類型和返回類型都可以明確指定,減少了運(yùn)行時(shí)錯(cuò)誤。

3. 自動(dòng)生成 API 文檔

FastAPI 內(nèi)置了自動(dòng)生成交互式文檔的功能,支持 Swagger 和 Redoc,無(wú)需額外安裝插件。文檔不僅易于查看,還可以直接測(cè)試接口。

4. 數(shù)據(jù)驗(yàn)證和序列化

FastAPI 集成了 Pydantic,用于數(shù)據(jù)校驗(yàn)和序列化。輸入的參數(shù)會(huì)被自動(dòng)驗(yàn)證,錯(cuò)誤會(huì)以統(tǒng)一格式返回,開(kāi)發(fā)者無(wú)需手動(dòng)處理。

5. 易上手

相比 Flask,FastAPI 的代碼更簡(jiǎn)潔;相比 Django,它更輕量級(jí),非常適合快速開(kāi)發(fā)。


如何安裝 FastAPI?

安裝 FastAPI 和運(yùn)行服務(wù)所需的 Uvicorn 只需兩行命令:

pip install fastapi
pip install uvicorn[standard]

快速上手:第一個(gè) FastAPI 應(yīng)用

以下是一個(gè)最基礎(chǔ)的 FastAPI 示例,用來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的 REST API:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
defread_root():
return {"message": "Hello, FastAPI!"}

@app.get("/items/{item_id}")
defread_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}

保存為?main.py,然后運(yùn)行:

uvicorn main:app --reload

打開(kāi)瀏覽器訪問(wèn)?http://127.0.0.1:8000/,你會(huì)看到:

{"message": "Hello, FastAPI!"}


FastAPI 的核心功能

FastAPI 提供了一系列現(xiàn)代化的功能,以下是一些常用的核心功能:


1. 路由與參數(shù)處理

FastAPI 支持通過(guò)路徑參數(shù)、查詢參數(shù)和請(qǐng)求體接收數(shù)據(jù),語(yǔ)法直觀。

路徑參數(shù)

@app.get("/users/{user_id}")
defget_user(user_id: int):
return {"user_id": user_id}

訪問(wèn)?http://127.0.0.1:8000/users/42,返回:

{"user_id": 42}

查詢參數(shù)

@app.get("/search")
defsearch_items(keyword: str, limit: int = 10):
return {"keyword": keyword, "limit": limit}

訪問(wèn)?http://127.0.0.1:8000/search?keyword=FastAPI&limit=5,返回:

{"keyword": "FastAPI", "limit": 5}

2. 請(qǐng)求體處理和數(shù)據(jù)驗(yàn)證

FastAPI 使用 Pydantic 模型來(lái)處理請(qǐng)求體數(shù)據(jù),同時(shí)自動(dòng)進(jìn)行校驗(yàn)。

定義請(qǐng)求體模型

from pydantic import BaseModel

classItem(BaseModel):
name: str
price: float
is_offer: bool = None

接收請(qǐng)求體

@app.post("/items/")
defcreate_item(item: Item):
return {"item": item}

向?http://127.0.0.1:8000/items/?發(fā)送以下 JSON 數(shù)據(jù):

{
"name": "Laptop",
"price": 999.99,
"is_offer": true
}

服務(wù)器會(huì)返回:

{
"item": {
"name": "Laptop",
"price": 999.99,
"is_offer": true
}
}

3. 異步支持

FastAPI 原生支持異步編程,可以輕松處理高并發(fā)請(qǐng)求。

import asyncio

@app.get("/async")
asyncdefasync_endpoint():
await asyncio.sleep(1)
return {"message": "This is an async response!"}

異步接口在高并發(fā)場(chǎng)景下的表現(xiàn)尤為出色。


4. 自動(dòng)生成 API 文檔

FastAPI 內(nèi)置了 Swagger 和 Redoc 文檔,訪問(wèn)以下路徑即可查看:

文檔不僅展示了所有接口,還允許你在線測(cè)試,非常方便!


5. 中間件和依賴注入

FastAPI 提供了靈活的中間件和依賴注入功能,可以輕松實(shí)現(xiàn)請(qǐng)求前后處理、數(shù)據(jù)庫(kù)連接等任務(wù)。

示例:自定義中間件

from fastapi import FastAPIfrom starlette.middleware.base import BaseHTTPMiddlewareapp = FastAPI()classCustomMiddleware(BaseHTTPMiddleware):asyncdefdispatch(self, request, call_next):        print("Before request")        response = await call_next(request)        print("After request")return responseapp.add_middleware(CustomMiddleware)

FastAPI 的實(shí)際應(yīng)用場(chǎng)景

FastAPI 適用于構(gòu)建現(xiàn)代化的 Web 應(yīng)用和 API 服務(wù),以下是一些典型場(chǎng)景:

1. 構(gòu)建 RESTful API

FastAPI 可以輕松實(shí)現(xiàn)增刪改查接口,特別適合微服務(wù)架構(gòu)。

2. 數(shù)據(jù)驗(yàn)證和清洗

通過(guò) Pydantic,FastAPI 可以高效處理數(shù)據(jù)驗(yàn)證,減少后續(xù)邏輯代碼。

3. 實(shí)時(shí)應(yīng)用

FastAPI 的異步支持使其非常適合實(shí)時(shí)聊天、推送通知等場(chǎng)景。

4. 與機(jī)器學(xué)習(xí)結(jié)合

FastAPI 可用于部署機(jī)器學(xué)習(xí)模型,為前端或其他服務(wù)提供預(yù)測(cè)接口。


使用經(jīng)驗(yàn)

作為一個(gè)長(zhǎng)期使用 FastAPI 的開(kāi)發(fā)者,我對(duì)它的以下幾點(diǎn)感受特別深刻:

  1. 高效開(kāi)發(fā)
    FastAPI 的自動(dòng)文檔生成功能讓我省下了很多時(shí)間,不用再手動(dòng)寫 Swagger 配置文件了。
  2. 數(shù)據(jù)驗(yàn)證簡(jiǎn)單易用
    以往在 Flask 項(xiàng)目中,我需要單獨(dú)引入工具庫(kù)來(lái)做參數(shù)校驗(yàn)。而在 FastAPI 中,Pydantic 完全解決了這個(gè)問(wèn)題。
  3. 性能表現(xiàn)優(yōu)異
    在一次構(gòu)建高并發(fā)數(shù)據(jù)服務(wù)時(shí),F(xiàn)astAPI 的異步支持讓我輕松應(yīng)對(duì)了上千次請(qǐng)求。

FastAPI 是一個(gè)現(xiàn)代化的 Python 框架,它用類型注解、異步編程和自動(dòng)文檔徹底改變了 API 開(kāi)發(fā)的體驗(yàn)。無(wú)論是快速開(kāi)發(fā)小型項(xiàng)目,還是構(gòu)建復(fù)雜的微服務(wù)架構(gòu),F(xiàn)astAPI 都能讓你的代碼更優(yōu)雅、更高效。

如果你還沒(méi)試過(guò) FastAPI,趕緊動(dòng)手安裝,用它寫一個(gè)小項(xiàng)目吧!相信我,它會(huì)讓你重新愛(ài)上 Python 的 API 開(kāi)發(fā)!

文章轉(zhuǎn)自微信公眾號(hào)@任無(wú)意門

上一篇:

FastAPI “類視圖”管理接口

下一篇:

利用騰訊云輕量應(yīng)用服務(wù)器構(gòu)建后端API,輕松打造PDF轉(zhuǎn)Word的小程序工具
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)