001-FastAPI简介与环境搭建
难度:🟢 | 预计时间:60分钟 | 前置:Python基础知识
学习目标
- 了解FastAPI的特点和优势
- 掌握FastAPI开发环境的搭建
- 理解FastAPI的核心概念和技术架构
- 完成第一个Hello World程序
- 掌握FastAPI项目的基本结构
🚀 什么是FastAPI
FastAPI是一个现代、快速(高性能)的Web框架,用于构建Python API。它基于标准Python类型提示,具有以下特点:
核心特性
- 高性能:与NodeJS和Go相当的性能
- 快速开发:开发速度提升200-300%
- 减少Bug:减少约40%的人为错误
- 直观:强大的编辑器支持,自动补全
- 简单:易于使用和学习
- 简短:减少代码重复
- 健壮:生产就绪的代码,自动交互式文档
- 标准化:基于API开放标准:OpenAPI和JSON Schema
技术架构
技术栈对比
框架 | 性能 | 学习曲线 | 文档质量 | 生态系统 | 适用场景 |
---|---|---|---|---|---|
FastAPI | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | API开发、微服务 |
Django | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 全栈Web应用 |
Flask | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 轻量级Web应用 |
Tornado | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | 实时应用 |
技术基础
- Starlette:轻量级ASGI框架,提供Web功能
- Pydantic:数据验证和设置管理库
- Type Hints:Python 3.6+的类型提示系统
- Async/Await:异步编程支持,提升性能
🛠️ 环境搭建
1. Python环境要求
FastAPI需要Python 3.7或更高版本。
# 检查Python版本
python --version
# 或
python3 --version
2. 创建虚拟环境
# 创建项目目录
mkdir fastapi-tutorial
cd fastapi-tutorial
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate
3. 安装FastAPI
# 安装FastAPI
pip install fastapi
# 安装ASGI服务器(用于运行应用)
pip install "uvicorn[standard]"
# 可选:安装所有依赖
pip install "fastapi[all]"
4. 验证安装
创建一个简单的测试文件:
# test_install.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
运行测试:
uvicorn test_install:app --reload
访问 http://127.0.0.1:8000,如果看到 {"Hello":"World"}
,说明安装成功。
📝 开发工具推荐
1. IDE/编辑器
- PyCharm:专业Python IDE
- VS Code:轻量级,插件丰富
- Vim/Neovim:高效的文本编辑器
2. 必备插件(VS Code)
- Python
- Pylance
- Python Docstring Generator
- REST Client
3. 调试工具
- Postman:API测试工具
- HTTPie:命令行HTTP客户端
- curl:命令行工具
🎯 第一个FastAPI应用
让我们创建一个完整的Hello World应用:
# main.py
from fastapi import FastAPI
from typing import Optional
# 创建FastAPI实例
app = FastAPI(
title="我的第一个FastAPI应用",
description="这是一个学习FastAPI的示例应用",
version="1.0.0"
)
# 根路径
@app.get("/")
def read_root():
return {"message": "欢迎使用FastAPI!"}
# 带参数的路径
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
# 健康检查端点
@app.get("/health")
def health_check():
return {"status": "healthy"}
运行应用
# 开发模式运行(自动重载)
uvicorn main:app --reload
# 指定端口
uvicorn main:app --reload --port 8080
# 指定主机
uvicorn main:app --reload --host 0.0.0.0 --port 8000
访问应用
- 应用首页:http://127.0.0.1:8000/
- 交互式文档:http://127.0.0.1:8000/docs
- ReDoc文档:http://127.0.0.1:8000/redoc
- OpenAPI规范:http://127.0.0.1:8000/openapi.json
🔍 理解FastAPI核心概念
1. 应用实例
app = FastAPI()
这是你的应用的主要入口点。
2. 路径操作装饰器
@app.get("/") # HTTP GET方法
@app.post("/") # HTTP POST方法
@app.put("/") # HTTP PUT方法
@app.delete("/") # HTTP DELETE方法
3. 路径操作函数
def read_root():
return {"Hello": "World"}
这是当路径被访问时执行的函数。
4. 返回值
FastAPI会自动将Python字典、列表等转换为JSON响应。
📋 项目结构建议
fastapi-tutorial/
├── venv/ # 虚拟环境
├── app/ # 应用代码
│ ├── __init__.py
│ ├── main.py # 主应用文件
│ ├── models/ # 数据模型
│ ├── routers/ # 路由模块
│ ├── dependencies/ # 依赖项
│ └── config.py # 配置文件
├── tests/ # 测试文件
├── requirements.txt # 依赖列表
└── README.md # 项目说明
🎯 实践练习
练习1:创建个人信息API
创建一个返回个人信息的API端点:
@app.get("/profile")
def get_profile():
return {
"name": "张三",
"age": 25,
"city": "北京",
"skills": ["Python", "FastAPI", "数据库"]
}
练习2:添加查询参数
创建一个支持查询参数的搜索端点:
@app.get("/search")
def search_items(keyword: str, limit: int = 10):
return {
"keyword": keyword,
"limit": limit,
"results": [f"结果{i}" for i in range(1, limit + 1)]
}
实践练习
- 练习1:安装FastAPI开发环境(验收标准:成功运行Hello World应用)
- 练习2:创建个人信息API端点(验收标准:返回JSON格式的个人信息)
- 练习3:添加查询参数支持(验收标准:支持keyword和limit参数的搜索接口)
- 练习4:配置开发工具(验收标准:IDE支持代码补全和类型检查)
- 练习5:访问自动生成的API文档(验收标准:能够在浏览器中查看Swagger UI)
常见问题
Q: 端口8000被占用怎么办?
A: 1) 使用lsof -i :8000
查找占用进程;2) 使用kill -9 <PID>
杀死进程;3) 或者使用--port 8001
指定其他端口。
Q: 为什么模块导入失败?
A: 1) 确认虚拟环境已激活;2) 检查当前工作目录是否正确;3) 确认FastAPI已正确安装;4) 检查Python路径配置。
Q: 自动重载功能不工作?
A: 1) 确保使用了--reload
参数;2) 检查文件是否保存在正确位置;3) 确认文件扩展名为.py;4) 重启uvicorn服务。
Q: 如何选择ASGI服务器?
A: 1) 开发环境推荐Uvicorn;2) 生产环境可考虑Gunicorn+Uvicorn;3) 高并发场景可选择Hypercorn;4) 根据具体需求选择合适的配置。
总结
- FastAPI是现代高性能的Python Web框架
- 基于标准Python类型提示,提供自动文档生成
- 核心依赖Starlette和Pydantic,性能优异
- 开发环境搭建简单,支持热重载
- 自动生成交互式API文档,提升开发效率
下一步
- 前往:002-第一个FastAPI应用
- 扩展阅读:Python异步编程、ASGI协议
参考与引用
- FastAPI官方文档 (2024)
- Uvicorn文档 (2024)
- Python类型提示 (2024)
- Starlette框架 (2024)
- Pydantic文档 (2024)
更新记录
- 更新时间: 2024-01-20 | 更新内容: 重构文档结构,添加技术架构图和对比表格,完善练习和FAQ | 更新人: Assistant