Post

【Python库】FastAPI的介绍及快速上手

FastAPI 初识:为什么选择 FastAPI? 在我们正式使用 FastAPI 之前,先来看下我们为什么要选择 FastAPI 这个框架,而不是 Flask、Django 等更熟、功能更全的框架,其实可以总结成几点:快、开发效率高、健壮。 快 (Fast): 性能极高:FastAPI 基于 St

阅读 6 点赞 0 评论 0

FastAPI 初识:为什么选择 FastAPI?

在我们正式使用 FastAPI 之前,先来看下我们为什么要选择 FastAPI 这个框架,而不是 Flask、Django 等更熟、功能更全的框架,其实可以总结成几点:快、开发效率高、健壮。

  1. 快 (Fast):

  • 性能极高:FastAPI 基于 Starlette(底层框架)和 Pydantic(数据校验),其性能与 Node.js、Go 等语言的框架不相上下,是 Python Web 框架中的性能王者,对比 Flask 和 Django 性能强悍了不少。

  • 天生异步:完美支持我们上一节课学习的 async/await,能轻松应对 Agent 开发中大量 I/O 密集型任务和高并发场景,虽然其他框架也可以支持异步,不过都需要额外的支持 / 扩展引入。

  1. 开发效率高 (Productive):

  • 代码极简:用最少的代码做最多的事,代码量可能只有传统框架的 1/3。

  • 无敌的自动交互式文档:这是 FastAPI 的 “杀手锏”!你只需要写 Python 代码,它就能自动为你生成两种风格的、功能强大的 API 文档(Swagger UI 和 ReDoc)。你可以直接在文档页面上调试和测试你的 API!

  • 强大的依赖注入系统:原生内置的依赖注入,让代码组织和复用变得异常简单和优雅(这个我们将在后续项目中深入体验)。

  1. 健壮 (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的使用进行学习。

评论