虽然平时前端开发更多用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: int

FastAPI就能根据类型提示来处理参数。

如果传的数据类型不对,它还能自动返回验证错误(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服务。

这也是我后来在一些个人项目里比较喜欢用它的原因。

最后修改:2026 年 09 月 02 日
如果觉得我的文章对你有用,请随意赞赏