了解 FastAPI 基础知识:FastAPI、Uvicorn、Starlette、Swagger UI 和 Pydantic 指南

了解 FastAPI 基础知识:FastAPI、Uvicorn、Starlette、Swagger UI 和 Pydantic 指南
最新回答
冭儍冭迗眞

2026-06-19 02:30:39

FastAPI 基础知识指南

FastAPI 是一个现代、高性能的 Web 框架,用于使用 Python 构建 API。它结合了异步编程和类型注释的优势,能够快速开发强大且高效的应用程序。以下是 FastAPI 及其关键组件的详细介绍。

1. FastAPI 的核心

FastAPI 建立在两个主要基础之上:

  • 异步编程:利用 Python 的 async 和 await 关键字,FastAPI 可以同时处理多个请求,非常适合需要高并发的应用程序。
  • 类型注释:FastAPI 使用 Python 的类型提示来自动验证和序列化请求和响应数据,使开发更快、更安全。
简单示例# main.pyfrom fastapi import FastAPIapp = FastAPI()@app.get("/")async def read_root(): return {"hello": "world"}

此示例展示了一个基本的 FastAPI 应用程序,具有单个路由 /,返回 JSON 响应 {"hello": "world"}。

2. Uvicorn:ASGI 服务器

Uvicorn 是一个快速的 ASGI 服务器,针对处理异步代码进行了优化。它是运行 FastAPI 应用程序的关键组件,负责处理传入的 HTTP 请求并管理这些请求的生命周期。

运行 FastAPI 应用程序

使用以下命令运行 FastAPI 应用程序:

uvicorn main:app --reload
  • main:app 指定 Uvicorn 应在 main.py 文件中查找应用程序实例。
  • --reload 在开发过程中启用热重载,每当保存更改时服务器会自动重新加载。

运行后,可以通过

http://127.0.0.1:8000
访问应用程序。

3. Starlette:FastAPI 的 Web 框架基础

FastAPI 构建于 Starlette 之上,Starlette 是一个轻量级的 ASGI 框架,用于处理核心 HTTP 操作,包括路由、中间件和 WebSockets 支持。

路由系统

FastAPI 利用 Starlette 的路由系统来定义 API 端点。例如:

@app.get("/items/{item_id}")async def read_item(item_id: int): return {"item_id": item_id}
  • @app.get("/items/{item_id}") 定义带有路径参数 item_id 的路由。
  • FastAPI 通过将 Starlette 的路由系统与其类型检查和验证集成来处理此路径参数类型(此处为 int)。
中间件

Starlette 允许添加中间件以进行各种操作,例如处理 CORS(跨源资源共享)、请求日志记录或自定义身份验证:

from starlette.middleware.cors import CORSMiddlewareapp.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"],)

Starlette 的灵活性使得 FastAPI 具有高度可配置性,允许开发人员根据需要轻松添加自定义中间件。

4. Swagger UI:交互式 API 文档

FastAPI 使用 Swagger UI 自动生成交互式 API 文档。该文档默认在 /docs 中提供,允许开发人员直接从浏览器测试端点。

访问 Swagger UI

启动 FastAPI 应用程序并访问

http://127.0.0.1:8000/docs
。您将看到一个交互式 Swagger UI,其中列出了所有路由、其参数以及预期响应。

另一个文档接口,ReDoc,默认也在 /redoc 提供,提供更详细的 API 规范视图。

5. Pydantic:数据验证和序列化

FastAPI 使用 Pydantic 进行数据验证。Pydantic 模型允许定义具有严格类型约束和自动验证的请求和响应数据的结构。

示例from fastapi import FastAPIfrom pydantic import BaseModelapp = FastAPI()class Item(BaseModel): name: str price: float is_offer: bool = False@app.put("/items/{item_id}")async def update_item(item_id: int, item: Item): return {"item_id": item_id, "item": item}
  • Item 模型继承自 BaseModel,定义了三个字段:name、price、is_offer。
  • 这些字段具有特定的数据类型和 is_offer 的可选默认值。
  • 当使用 JSON 数据向 /items/{item_id} 发送请求时,FastAPI 使用 Pydantic 根据 Item 模型验证数据,并在可能的情况下自动转换数据类型。
数据验证

尝试使用位于 /docs 的 Swagger UI 发送请求:

{ "name": "sample item", "price": 29.99}

FastAPI 将验证数据并在数据与预期类型不匹配时自动返回任何错误。例如,如果价格以字符串形式给出(如 "20"),FastAPI 将响应详细的验证错误。

6. 综合示例

将以上组件结合起来,扩展应用程序:

from fastapi import FastAPI, HTTPExceptionfrom pydantic import BaseModelfrom starlette.middleware.cors import CORSMiddlewareapp = FastAPI()class Item(BaseModel): name: str price: float is_offer: bool = Falseapp.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"],)@app.get("/")async def read_root(): return {"hello": "world"}@app.get("/items/{item_id}")async def read_item(item_id: int, q: str = None): if item_id == 0: raise HTTPException(status_code=404, detail="Item not found") return {"item_id": item_id, "q": q}@app.put("/items/{item_id}")async def update_item(item_id: int, item: Item): return {"item_id": item_id, "item": item}功能说明
  • 路由和参数处理:@app.get("/items/{item_id}") 端点演示路径参数和查询参数(例如 q)。
  • 异常处理:使用 HTTPException 进行自定义错误响应(例如,当找不到项目时)。
  • CORS:CORS 中间件允许从不同的域发出请求,这对于 Web 应用程序中的前后端通信至关重要。
运行应用程序

使用 Uvicorn 运行应用程序:

uvicorn main:app --reload

导航到

http://127.0.0.1:8000/docs
以查看交互式文档,或使用 curl 或 Postman 等工具将请求发送到不同的端点。

总结

FastAPI 将异步编程的性能优势与 Python 类型提示的简单性相结合,创建了一个快速、易于使用且适合生产应用程序的框架。通过集成 Uvicorn、Starlette、Swagger UI 和 Pydantic,FastAPI 提供了一种极其简化的 API 开发方法,使其成为快速原型设计和生产级应用程序的绝佳选择。掌握了这些核心基础知识后,您现在就可以更深入地了解 FastAPI 的世界并构建可扩展的高性能应用程序。