2026-06-19 02:30:39
FastAPI 是一个现代、高性能的 Web 框架,用于使用 Python 构建 API。它结合了异步编程和类型注释的优势,能够快速开发强大且高效的应用程序。以下是 FastAPI 及其关键组件的详细介绍。
FastAPI 建立在两个主要基础之上:
此示例展示了一个基本的 FastAPI 应用程序,具有单个路由 /,返回 JSON 响应 {"hello": "world"}。
Uvicorn 是一个快速的 ASGI 服务器,针对处理异步代码进行了优化。它是运行 FastAPI 应用程序的关键组件,负责处理传入的 HTTP 请求并管理这些请求的生命周期。
运行 FastAPI 应用程序使用以下命令运行 FastAPI 应用程序:
uvicorn main:app --reload运行后,可以通过
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}Starlette 允许添加中间件以进行各种操作,例如处理 CORS(跨源资源共享)、请求日志记录或自定义身份验证:
from starlette.middleware.cors import CORSMiddlewareapp.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"],)Starlette 的灵活性使得 FastAPI 具有高度可配置性,允许开发人员根据需要轻松添加自定义中间件。
FastAPI 使用 Swagger UI 自动生成交互式 API 文档。该文档默认在 /docs 中提供,允许开发人员直接从浏览器测试端点。
访问 Swagger UI启动 FastAPI 应用程序并访问
另一个文档接口,ReDoc,默认也在 /redoc 提供,提供更详细的 API 规范视图。
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}尝试使用位于 /docs 的 Swagger UI 发送请求:
{ "name": "sample item", "price": 29.99}FastAPI 将验证数据并在数据与预期类型不匹配时自动返回任何错误。例如,如果价格以字符串形式给出(如 "20"),FastAPI 将响应详细的验证错误。
将以上组件结合起来,扩展应用程序:
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}功能说明使用 Uvicorn 运行应用程序:
uvicorn main:app --reload导航到
FastAPI 将异步编程的性能优势与 Python 类型提示的简单性相结合,创建了一个快速、易于使用且适合生产应用程序的框架。通过集成 Uvicorn、Starlette、Swagger UI 和 Pydantic,FastAPI 提供了一种极其简化的 API 开发方法,使其成为快速原型设计和生产级应用程序的绝佳选择。掌握了这些核心基础知识后,您现在就可以更深入地了解 FastAPI 的世界并构建可扩展的高性能应用程序。