SuperAPI AI 工具集

fastapi-project-structure

编程与开发

查看项目

更新于 10-15 11:12

技能介绍

用途

FastAPI Project Structure 是一套面向 FastAPI 应用的标准目录布局与模块组织规范,用于帮助开发者以一致、可维护的方式组织项目代码。它定义了从应用入口、路由、数据模型到业务逻辑、依赖注入和数据库迁移的完整目录结构。

标准目录布局

资料给出的标准结构如下:

project/
  app/
    __init__.py
    main.py              # FastAPI app instance and lifespan
    config.py            # Settings via pydantic-settings
    api/
      __init__.py
      v1/
        __init__.py
        router.py        # Aggregates all v1 routers
        endpoints/
          __init__.py
          users.py
          items.py
    models/
      __init__.py
      user.py            # SQLAlchemy / ORM models
      item.py
    schemas/
      __init__.py
      user.py            # Pydantic request/response schemas
      item.py
    deps/
      __init__.py
      database.py        # DB session dependency
      auth.py            # Auth dependencies
    services/
      __init__.py
      user_service.py    # Business logic
      item_service.py
    db/
      __init__.py
      session.py         # Engine and session factory
      base.py            # Declarative base
  tests/
    __init__.py
    conftest.py
    test_users.py
    test_items.py
  alembic/               # Database migrations
    versions/
    env.py
  alembic.ini
  pyproject.toml

主要能力与关键约定

应用入口 app/main.py

作为应用入口点,负责创建 FastAPI 实例并管理生命周期。示例代码使用 contextlib.asynccontextmanager 定义 lifespan,在启动时创建表、初始化连接,在关闭时释放连接(await engine.dispose())。随后创建 FastAPI(title="My API", version="1.0.0", lifespan=lifespan) 并通过 app.include_router(api_router, prefix="/api/v1") 挂载路由。

路由聚合 app/api/v1/router.py

用于聚合各资源路由。示例中从 app.api.v1.endpoints 导入 users、items,创建 api_router = APIRouter(),并分别以 /users、/items 前缀和对应 tags 注册。

models 与 schemas 的区分

  • models/:ORM 模型(SQLAlchemy),代表数据库表。
  • schemas/:Pydantic 模型,代表 API 请求/响应结构。

规范要求两者保持分离,且绝不在端点中直接返回 ORM 模型。

依赖注入 app/deps/

用于放置可复用依赖。示例给出 app/deps/database.py 中的 get_db 异步生成器依赖,通过 async_session_maker() 提供 AsyncSession。

业务逻辑 app/services/

要求端点保持轻量,将逻辑移入 service 函数。示例 app/services/user_service.py 中的 get_user_by_id 接收 AsyncSession 与 user_id,返回 User | None。

配置 app/config.py

使用 pydantic_settings.BaseSettings 定义 Settings,包含 database_url、secret_key、debug(默认 False),并通过 model_config = {"env_file": ".env"} 从 .env 读取配置,最后实例化 settings = Settings()。

规则

  • 每个资源一个路由文件(如 users.py、items.py)。
  • 绝不在端点函数中放置业务逻辑,应使用 services。
  • API 始终版本化(/api/v1/、/api/v2/)。
  • 所有共享状态(数据库会话、认证、配置)使用 Depends()。
  • Pydantic schema 与 ORM 模型分目录存放。

适用场景

适用于使用 FastAPI 构建后端 API 的项目,尤其是需要清晰分层、便于团队协作与长期维护的中大型应用。目录中包含 tests 与 alembic 迁移目录,也适合需要测试与数据库迁移管理的项目。

限制

资料未提供该规范的安装命令、依赖版本要求、收费或授权信息,也未说明其适用的 FastAPI 或 Python 版本范围,这些内容暂未提供。