闷骚熊猫

导航

fastapi 核心

FastAPI 是一个现代、高性能的 Python Web 框架,专为构建 API 而设计。它基于 Python 的类型提示和异步编程模型,提供了快速开发、高性能和易于维护的特性。以下是 FastAPI 的核心特性及其工作原理:


核心特性

  1. 高性能:

    • 基于 Starlette(ASGI 框架)和 Pydantic(数据验证库),性能接近 Node.js 和 Go。
    • 支持异步编程(async 和 await),能够高效处理并发请求。
  2. 类型提示与数据验证:

    • 利用 Python 的类型提示(Type Hints)和 Pydantic 模型,自动验证请求和响应数据。
    • 减少代码错误,提高开发效率。
  3. 自动生成 API 文档:

    • 自动生成交互式 API 文档,支持 Swagger UI 和 ReDoc。
    • 开发者无需手动编写文档,文档与代码保持同步。
  4. 依赖注入系统:

    • 提供了强大的依赖注入机制,方便管理共享逻辑(如数据库连接、身份验证等)。
    • 支持分层依赖,代码结构更清晰。
  5. 异步支持:

    • 完全支持异步编程,适合 I/O 密集型任务(如数据库操作、外部 API 调用等)。
  6. 标准兼容:

    • 完全兼容 OpenAPI(以前称为 Swagger)和 JSON Schema 标准。

核心组件

  1. 路由(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!"}
  2. 请求与响应模型:

    • 使用 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
  3. 依赖注入(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}
  4. 异常处理:

    • 支持自定义异常处理器,返回友好的错误信息。
    • 示例:
      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}
  5. 中间件(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 会自动生成两种交互式文档:

  1. Swagger UI:访问 /docs 路径。
  2. 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)

适用场景

  1. 构建 RESTful API:FastAPI 是构建 API 的理想选择。
  2. 微服务:由于其高性能和异步支持,适合构建微服务架构。
  3. 实时应用:支持 WebSocket,适合实时通信场景。
  4. 数据驱动应用:结合 Pydantic,适合处理复杂的数据验证和转换。

总结

FastAPI 是一个现代化、高性能的 Python Web 框架,结合了类型提示、异步编程和自动文档生成等特性,极大地提高了开发效率和代码质量。无论是构建小型 API 还是大型微服务,FastAPI 都是一个强大的工具。

posted on 2025-03-25 10:49  闷骚熊猫  阅读(87)  评论(0)    收藏  举报