fastapi 核心
FastAPI 是一个现代、高性能的 Python Web 框架,专为构建 API 而设计。它基于 Python 的类型提示和异步编程模型,提供了快速开发、高性能和易于维护的特性。以下是 FastAPI 的核心特性及其工作原理:
核心特性
-
高性能:
- 基于 Starlette(ASGI 框架)和 Pydantic(数据验证库),性能接近 Node.js 和 Go。
- 支持异步编程(
async和await),能够高效处理并发请求。
-
类型提示与数据验证:
- 利用 Python 的类型提示(Type Hints)和 Pydantic 模型,自动验证请求和响应数据。
- 减少代码错误,提高开发效率。
-
自动生成 API 文档:
- 自动生成交互式 API 文档,支持 Swagger UI 和 ReDoc。
- 开发者无需手动编写文档,文档与代码保持同步。
-
依赖注入系统:
- 提供了强大的依赖注入机制,方便管理共享逻辑(如数据库连接、身份验证等)。
- 支持分层依赖,代码结构更清晰。
-
异步支持:
- 完全支持异步编程,适合 I/O 密集型任务(如数据库操作、外部 API 调用等)。
-
标准兼容:
- 完全兼容 OpenAPI(以前称为 Swagger)和 JSON Schema 标准。
核心组件
-
路由(Routing):
- 使用装饰器定义路由,支持 HTTP 方法(GET、POST、PUT、DELETE 等)。
- 示例:
python
1from fastapi import FastAPI 2 3app = FastAPI() 4 5@app.get("/") 6def read_root(): 7 return {"message": "Hello, World!"}
-
请求与响应模型:
- 使用 Pydantic 模型定义请求体和响应体,自动验证数据。
- 示例:
python
1from pydantic import BaseModel 2 3class Item(BaseModel): 4 name: str 5 price: float 6 7@app.post("/items/") 8def create_item(item: Item): 9 return item
-
依赖注入(Dependency Injection):
- 使用
Depends定义依赖,方便共享逻辑。 - 示例:
python
1from fastapi import Depends 2 3def get_db(): 4 # 模拟数据库连接 5 return "db_connection" 6 7@app.get("/items/") 8def read_items(db: str = Depends(get_db)): 9 return {"db": db}
- 使用
-
异常处理:
- 支持自定义异常处理器,返回友好的错误信息。
- 示例:
python
1from fastapi import HTTPException 2 3@app.get("/items/{item_id}") 4def read_item(item_id: int): 5 if item_id == 0: 6 raise HTTPException(status_code=404, detail="Item not found") 7 return {"item_id": item_id}
-
中间件(Middleware):
- 支持添加中间件,处理请求和响应。
- 示例:
python
1@app.middleware("http") 2async def add_custom_header(request, call_next): 3 response = await call_next(request) 4 response.headers["X-Custom-Header"] = "Custom Value" 5 return response
自动生成 API 文档
FastAPI 会自动生成两种交互式文档:
- Swagger UI:访问
/docs路径。 - ReDoc:访问
/redoc路径。
文档基于 OpenAPI 标准,实时反映代码的更改。
示例代码
以下是一个完整的 FastAPI 示例:
python
1from fastapi import FastAPI, HTTPException, Depends
2from pydantic import BaseModel
3
4app = FastAPI()
5
6class Item(BaseModel):
7 name: str
8 price: float
9
10items = []
11
12@app.post("/items/")
13def create_item(item: Item):
14 items.append(item)
15 return item
16
17@app.get("/items/{item_id}")
18def read_item(item_id: int):
19 if item_id >= len(items):
20 raise HTTPException(status_code=404, detail="Item not found")
21 return items[item_id]
22
23if __name__ == "__main__":
24 import uvicorn
25 uvicorn.run(app, host="0.0.0.0", port=8000)
适用场景
- 构建 RESTful API:FastAPI 是构建 API 的理想选择。
- 微服务:由于其高性能和异步支持,适合构建微服务架构。
- 实时应用:支持 WebSocket,适合实时通信场景。
- 数据驱动应用:结合 Pydantic,适合处理复杂的数据验证和转换。
总结
FastAPI 是一个现代化、高性能的 Python Web 框架,结合了类型提示、异步编程和自动文档生成等特性,极大地提高了开发效率和代码质量。无论是构建小型 API 还是大型微服务,FastAPI 都是一个强大的工具。
浙公网安备 33010602011771号