虽然平时前端开发更多用TypeScript和Node.js,但在一些API、自动化和数据处理的项目里,我也经常用Python。
在Python的Web框架里,我比较喜欢FastAPI。
原因很简单:
写API很舒服。
第一个FastAPI项目
安装:
pip install fastapi uvicorn创建:
from fastapi import FastAPI
app = FastAPI()
# 根目录
@app.get("/")
async def root():
return {
"message": "Hello FastAPI"
}启动:
uvicorn main:app --reload --port 8000打开浏览器访问:
http://localhost:8000就能看到JSON响应了。
FastAPI的类型提示很舒服
比如:
@app.get("/users/{user_id}")
async def get_user(user_id: int):
return {
"id": user_id
}这里直接写:
user_id: intFastAPI就能根据类型提示来处理参数。
如果传的数据类型不对,它还能自动返回验证错误(2025-6-13补充:甚至还会提示错误在哪里,有一说一很不利于反爬)。
这也是我喜欢FastAPI的原因之一。
Query参数
比如:
@app.get("/users")
async def get_users(
page: int = 1,
page_size: int = 20
):
return {
"page": page,
"page_size": page_size
}请求:
/users?page=2&page_size=10就能得到:
{
"page": 2,
"page_size": 10
}POST请求
比如创建用户:
@app.post("/users")
async def create_user(name: str):
return {
"name": name
}不过实际项目里,很少会把所有参数直接写在函数参数里。
更常见的是用Pydantic模型。
from pydantic import BaseModel
class UserCreate(BaseModel):
name: str
age: int然后:
@app.post("/users")
async def create_user(user: UserCreate):
return user这样请求的数据结构就很明确了。
自动生成API文档
FastAPI一个很方便的功能就是自动生成文档。
启动服务器之后,直接访问:
/docs接口参数、请求方式、数据结构这些信息都会显示出来。
开发和调试的时候特别方便。
前后端联调的时候,也不用额外维护一份独立的API文档。
注意生产环境建议在FastAPI注册时禁用自动生成文档或者修改文档访问地址:
# 禁用自动生成文档示例
from fastapi import FastAPI
app = FastAPI(
docs_url=None, # 禁用 /docs (Swagger UI)
redoc_url=None, # 禁用 /redoc (ReDoc)
openapi_url=None # 禁用 /openapi.json (OpenAPI 架构文件)
)
@app.get("/")
def read_root():
return {"message": "Hello World"}# 修改文档地址示例
from fastapi import FastAPI
app = FastAPI(
docs_url="/my-custom-docs", # 将 Swagger UI 地址改为 /my-custom-docs
redoc_url="/my-custom-redoc", # 将 ReDoc 地址改为 /my-custom-redoc
openapi_url="/api/v1/openapi.json" # 修改 OpenAPI JSON 文件路径
)async def
FastAPI支持异步接口:
@app.get("/users")
async def get_users():
...如果接口里面有异步I/O,比如异步数据库访问、网络请求这些,可以用异步方式。
不过这里要注意:
写了async不代表代码自动变快。
如果在异步函数里执行大量同步阻塞操作,照样会把执行环境卡住。
比如:
@app.get("/")
async def root():
time.sleep(10)这仍然是阻塞操作。
所以异步要跟异步I/O配套用才行。
FastAPI为什么适合做小型API服务
我觉得FastAPI特别适合:
个人项目
内部API
数据接口
自动化服务
AI API
爬虫服务
微服务特别是需要快速写一个后端接口的时候。
相比一些重量级框架,FastAPI的代码量通常要少很多。
FastAPI + 前端
如果前端是Vue:
Vue 3
↓
HTTP
↓
FastAPI
↓
数据库 / 第三方API这套组合很直接。
前端负责:
UI
状态
交互FastAPI负责:
认证
业务逻辑
数据处理
API两边职责比较清楚。
我为什么比较喜欢FastAPI
对我来说,FastAPI最大的优势不是所谓的"性能很高"。
而是:
Python
+
类型提示
+
Pydantic
+
自动文档
+
异步支持这些东西凑到一起之后,开发体验确实不错。
尤其是做一些需要调第三方API、处理数据、写自动化逻辑的项目时,FastAPI能很快把Python代码变成一个可用的HTTP服务。
这也是我后来在一些个人项目里比较喜欢用它的原因。