Fast API 基础用法
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建基于 Python 3.7+ 的 API,使用标准的 Python 类型提示。它基于 Starlette(用于 web 框架的核心功能)和 Pydantic(用于数据验证)。
🚀 FastAPI 简介
- 快速:性能媲美 NodeJS 和 Go,得益于 Starlette 和 Pydantic。
- 高效开发:减少约 40% 的 bug,代码自动补全,强类型提示。
- 自动文档:基于 OpenAPI 自动生成交互式 API 文档。
- 原生支持异步编程:支持
async/await
。
✨ 快速开始
🔧 安装与初始化
# 推荐使用虚拟环境
python -m venv env
source env/bin/activate # Windows: env\Scripts\activate
# 安装 FastAPI 和 Uvicorn 作为 ASGI 服务器
pip install fastapi uvicorn
### 创建一个最简单的 FastAPI 应用
```python
# main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
启动服务器
uvicorn main:app --reload
自动生成文档:
- Swagger UI: http://127.0.0.1:8000/docs
- ReDoc: http://127.0.0.1:8000/redoc
FastAPI vs Flask 对比
特性 | FastAPI | Flask |
---|---|---|
🧠 类型支持 | ✅ 支持 Python 类型提示,自动校验请求参数 | ❌ 需使用其他工 具(如 marshmallow)手动实现 |
📄 自动文档生成 | ✅ 自动生成 Swagger 和 ReDoc 文档 | ❌ 需手动集成 Flask-RESTPlus 等 |
⚙️ 异步支持 | ✅ 原生 async/await 支持,适合高并发 | ⚠️ 原生不支持,需搭配额外依赖或异步服务器 |
🔐 请求体校验 | ✅ 使用 Pydantic 自动解析并验证请求体 | ❌ 需要手动编写验证逻辑或借助第三方包 |
🏎 性能基准 | ⚡ 非常高(与 Node.js、Go 接近) | ⛽️ 普通,适合中小型项目 |
📈 学习曲线 | ⬆️ 稍高,需要了解类型提示与异步 | ⬇️ 低,上手快,文档和社区资源丰富 |
📦 路由结构与模块划分 | ✅ 支持 APIRouter 模块化、依赖注入更灵活 | ❌ 路由结构较扁平,复杂项目中模块化不如 FastAPI 自然 |
📚 文档体验 | ✅ http://localhost:8000/docs 自动提供 Swagger UI | ❌ 需手动添加扩展插件 |
""" |
🔄 请求方法示例
- GET 请求
- POST 请求
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
@app.post("/items/")
def create_item(item: Item):
return item
📦 使用依赖注入(Dependency Injection)
from fastapi import Depends
def common_parameters(q: str = None):
return {"q": q}
@app.get("/search/")
def search(params: dict = Depends(common_parameters)):
return params
tip
FastAPI 的依赖注入功能强大且可组合,非常适合大型项目。
⚙️ 数据验证与类型提示
from pydantic import BaseModel, Field
class User(BaseModel):
username: str = Field(..., max_length=50)
age: int = Field(..., gt=0)
@app.post("/users/")
def create_user(user: User):
return user
🔐 自动生成 API 文档
无需额外配置,FastAPI 内置支持:
- OpenAPI (Swagger UI)
- ReDoc
访问 /docs
或 /redoc
即可查看交互式文档。
📁 示例项目结构
myapp/
├── main.py
├── routers/
│ ├── user.py
│ └── item.py
├── models/
├── services/
├── config.py
📚 总结
- FastAPI 是构建现代 RESTful API 的利器
- 拥有强大的异步支持、类型校验、文档自动生成能力
- 适用于微服务架构、数据密集型服务等中大型项目