FastAPI入门:从简介到实战,对比Flask帮你选对框架

你是不是还在为Python Web API开发的速度和复杂度头疼?FastAPI的GitHub星标数在3年内从0飙升至超过60,000,成为增长最快的Python框架之一!

本文为Python开发者提供一份实用的FastAPI入门指南,涵盖其核心简介、简明使用教程、常用文件结构,并对比Flask等框架的优势与不足。通过代码示例和结构解析,助你快速上手高性能API开发。

目录:

    • ✨ FastAPI是什么?
    • 🚀 快速上手:一个最小示例
    • 📁 常用文件结构
    • ⚖️ FastAPI vs Flask:优势与不足
    • 💻 完整代码参考

✨ FastAPI是什么?

FastAPI是一个基于Python 3.6+类型提示的现代Web框架,专为构建高性能API设计。它由Sebastián Ramírez开发,融合了Starlette(ASGI框架)和Pydantic(数据验证),让你用更少的代码实现更多功能。

核心特点一览:

    • 极高性能:支持异步编程,速度媲美Node.js和Go,轻松处理高并发请求。
    • 开发效率高:自动生成交互式API文档(Swagger UI和ReDoc),减少手动编写文档的麻烦。
    • 类型安全:利用Python类型提示进行自动数据验证和序列化,提升代码可维护性。
    • 易于学习:设计简洁,文档清晰,即使新手也能快速入门。

🚀 快速上手:一个最小示例

只需几步,你就能跑起第一个FastAPI应用。首先,安装必备库:

复制代码
uv add fastapi uvicorn[standard]

接着,创建一个名为main.py的文件,并写入以下代码:

复制代码
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

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

运行应用:

复制代码
uv run uvicorn main:app --reload

打开浏览器,访问 http://127.0.0.1:8000 会看到JSON响应;访问 http://127.0.0.1:8000/docs 即可使用自动生成的交互式文档测试API端点。是不是很简单?

📁 常用文件结构

随着项目变大,良好的文件结构能提升可维护性。以下是推荐的FastAPI项目布局:

复制代码
my_project/
├── .venv/
├── app/
│   ├── __init__.py
│   ├── main.py               # 创建FastAPI实例和主路由
│   ├── api/                  # 存放所有路由端点
│   │   ├── __init__.py
│   │   ├── items.py          # 示例:商品相关端点
│   │   └── users.py          # 示例:用户相关端点
│   ├── models/               # SQLAlchemy等ORM模型(可选)
│   ├── schemas/              # Pydantic模型,用于数据验证
│   ├── core/                 # 核心配置(如数据库连接、设置)
│   └── utils/                # 工具函数
├── tests/                    # 测试文件
├── pyproject.toml
└── README.md

这种结构清晰分离关注点:main.py初始化应用,api/处理路由,schemas/定义数据模式。例如,在api/items.py中:

复制代码
from fastapi import APIRouter

router = APIRouter()

@router.get("/items/")
def get_items():
    return [{"name": "Item 1"}, {"name": "Item 2"}]

然后在main.py中导入路由,让项目模块化,便于团队协作。

⚖️ FastAPI vs Flask:优势与不足

FastAPI常被拿来与Flask比较,两者都是流行的Python Web框架。以下是关键对比:

FastAPI的优势:

    • 性能领先:基于ASGI,原生支持异步,适合高并发场景;Flask基于WSGI,通常同步运行。
    • 开箱即用的文档:自动生成OpenAPI规范文档,无需额外配置;Flask需要扩展如Flask-RESTX。
    • 现代开发体验:深度集成类型提示,编辑器支持好,减少运行时错误;Flask更依赖约定和扩展。
    • 数据验证自动化:通过Pydantic自动验证请求数据;Flask通常需要手动处理或第三方库。

FastAPI的不足:

    • 生态系统较新:Flask有更丰富的插件和社区资源,FastAPI的第三方库相对较少。
    • 异步学习曲线:如果你不熟悉异步编程,可能需要时间适应;Flask的同步模式更易上手。
    • 适用场景:FastAPI更适合API驱动和微服务项目;Flask在小型全栈应用或原型开发中更灵活。

选择建议:如果你追求高性能、现代API开发 ,FastAPI是理想选择;如果需要快速原型或依赖大量现有插件,Flask可能更合适。

💻 完整代码参考

这里是一个综合示例,包含路由、Pydantic模型和错误处理,帮你巩固所学:

复制代码
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Optional

app = FastAPI(title="示例API", version="1.0.0")

class Item(BaseModel):
    name: str
    price: float
    description: Optional[str] = None

items_db = []

@app.get("/")
def home():
    return {"message": "欢迎使用FastAPI API"}

@app.get("/items/", summary="获取所有商品")
def get_items():
    return items_db

@app.get("/items/{item_id}", summary="根据ID获取商品")
def get_item(item_id: int):
    if item_id < 0 or item_id >= len(items_db):
        raise HTTPException(status_code=404, detail="商品未找到")
    return items_db[item_id]

@app.post("/items/", summary="创建新商品")
def create_item(item: Item):
    items_db.append(item)
    return {"message": "商品创建成功", "item": item}

@app.put("/items/{item_id}", summary="更新商品")
def update_item(item_id: int, item: Item):
    if item_id < 0 or item_id >= len(items_db):
        raise HTTPException(status_code=404, detail="商品未找到")
    items_db[item_id] = item
    return {"message": "商品更新成功", "item": item}

将代码保存为main.py,运行后访问/docs即可测试所有端点。这个示例展示了FastAPI的路由定义、模型验证和错误处理,实战性很强。


喜欢本文?不要错过✨,点赞👍收藏⭐关注我👆,一起学习更多有用的知识,完善你我的技能树!

相关推荐
Y幽谷客11 小时前
Python加载本地大模型(Qwen3.5 8B)
python·大模型
伞伞悦读11 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
线上放牧人11 小时前
Windows删除图标缓存
windows·python·pyqt
qq_54702617912 小时前
Python 变量和简单数据类型
python
智搜广告13 小时前
智搜广告:科技行业AI回答优化公司如何破局
大数据·python·elasticsearch·geo
IpdataCloud14 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
2601_9669496514 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
蒸鱼Yuzheng14 小时前
Python 游戏测试开发怎么准备:日志解析、接口校验、并发与可维护性
自动化测试·python·测试开发·面试题·游戏测试
Ivanqhz14 小时前
BM1688 双核架构
python·深度学习·神经网络·cnn·mlir
Java后端的Ai之路15 小时前
Python进阶探索17 - Python中的深拷贝与浅拷贝
人工智能·python·ai·浅拷贝·深拷贝