FastAPI 初识:为什么选择 FastAPI?
在我们正式使用 FastAPI 之前,先来看下我们为什么要选择 FastAPI 这个框架,而不是 Flask、Django 等更熟、功能更全的框架,其实可以总结成几点:快、开发效率高、健壮。
快 (Fast):
性能极高:FastAPI 基于 Starlette(底层框架)和 Pydantic(数据校验),其性能与 Node.js、Go 等语言的框架不相上下,是 Python Web 框架中的性能王者,对比 Flask 和 Django 性能强悍了不少。
天生异步:完美支持我们上一节课学习的 async/await,能轻松应对 Agent 开发中大量 I/O 密集型任务和高并发场景,虽然其他框架也可以支持异步,不过都需要额外的支持 / 扩展引入。
开发效率高 (Productive):
代码极简:用最少的代码做最多的事,代码量可能只有传统框架的 1/3。
无敌的自动交互式文档:这是 FastAPI 的 “杀手锏”!你只需要写 Python 代码,它就能自动为你生成两种风格的、功能强大的 API 文档(Swagger UI 和 ReDoc)。你可以直接在文档页面上调试和测试你的 API!
强大的依赖注入系统:原生内置的依赖注入,让代码组织和复用变得异常简单和优雅(这个我们将在后续项目中深入体验)。
健壮 (Robust):
基于类型提示:FastAPI 强制并充分利用 Python 的类型提示,这种强制风格会让你写出更稳定的代码。
Pydantic 深度集成:所有传入的请求数据,都会由 Pydantic 进行自动的数据校验、转换和文档化。这意味着,当你的代码开始执行时,你拿到的数据永远是你期望的类型,极大地减少了运行时错误。
一句话总结:FastAPI = Python 的易用性 + Go 的性能 + 自带的无敌文档。当然,如果你更习惯使用其他后端框架的话,完全没有任何问题,例如 Flask、Django 等都是可以的,课程对 API 框架的使用并没有任何限制。
Pydantic 的无缝集成
在前面的课时中,我们介绍过 Pydantic 的相关功能,了解了这个库的强大之处,而 FastAPI 的健壮性,很大一定程度上来源于它与 Pydantic 深度集成。
例如在 FastAPI 中,可以使用 Pydantic 模型定义 请求数据结构 和 响应数据结构、路由参数 等,并对这些路由参数进行校验,例如如下代码就是使用 Pydantic 对请求路由参数、请求 query、请求 body 结构体的综合校验,无需使用额外的库。
python
运行
from typing import Optional
from fastapi import FastAPI, Query, Path
from pydantic import BaseModel, Field
app = FastAPI()
class Item(BaseModel):
name: str = Field(..., min_length=3, max_length=50, description="商品名称,3-50个字符")
price: float = Field(..., gt=0, description="价格必须大于0")
in_stock: bool
@app.post("/users/{user_id}/items")
async def create_item(
user_id: int = Path(..., ge=1, description="用户ID必须>=1"),
q: Optional[str] = Query(None, min_length=3, description="搜索关键字,最少3个字符"),
item: Item = ...
):
return {"user_id": user_id, "query": q, "item": item}
当然关于 FastAPI 的使用技巧还有非常多,例如:依赖注入、错误处理、接口缓存、后台任务、路由模块化、中间件、响应流、类型驱动等。后续会继续对FastAPI的使用进行学习。
评论