Skip to main content

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

访问地址:http://127.0.0.1:8000

自动生成文档:


FastAPI vs Flask 对比

特性FastAPIFlask
🧠 类型支持✅ 支持 Python 类型提示,自动校验请求参数❌ 需使用其他工具(如 marshmallow)手动实现
📄 自动文档生成✅ 自动生成 Swagger 和 ReDoc 文档❌ 需手动集成 Flask-RESTPlus 等
⚙️ 异步支持✅ 原生 async/await 支持,适合高并发⚠️ 原生不支持,需搭配额外依赖或异步服务器
🔐 请求体校验✅ 使用 Pydantic 自动解析并验证请求体❌ 需要手动编写验证逻辑或借助第三方包
🏎 性能基准⚡ 非常高(与 Node.js、Go 接近)⛽️ 普通,适合中小型项目
📈 学习曲线⬆️ 稍高,需要了解类型提示与异步⬇️ 低,上手快,文档和社区资源丰富
📦 路由结构与模块划分✅ 支持 APIRouter 模块化、依赖注入更灵活❌ 路由结构较扁平,复杂项目中模块化不如 FastAPI 自然
📚 文档体验http://localhost:8000/docs 自动提供 Swagger UI❌ 需手动添加扩展插件
"""

🔄 请求方法示例

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

📦 使用依赖注入(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 的利器
  • 拥有强大的异步支持、类型校验、文档自动生成能力
  • 适用于微服务架构、数据密集型服务等中大型项目