菜单

项目结构

相关源文件

本文档提供了 RealWorld 仓库组织结构和目录结构的详细概述。它解释了主要目录、它们的作用以及它们如何组合形成完整的系统。有关项目设置和运行的信息,请参阅 开始使用

目录结构概述

RealWorld 仓库被组织成一个单体仓库(monorepo),其中包含多个相关项目,并且不同组件之间有清晰的职责划分。这是高层级的目录结构:

来源:README.md package.json

关键目录

目录目的
apps/包含单体仓库中可运行的应用
apps/api/使用 Nitro 和 Prisma 的参考 API 实现
apps/documentation/使用 Astro/Starlight 构建的文档站点
api/API 规范文件和测试工具
.github/用于 CI/CD 和 issue 模板的 GitHub 特定文件
media/图片和其他媒体资源

来源:README.md package.json api/openapi.yml

Monorepo 架构

RealWorld 仓库使用 pnpm workspaces 和 Turbo 进行构建编排,采用了单体仓库(monorepo)架构。这种结构允许在包之间共享代码,同时保持职责分离。

来源:package.json apps/api/package.json

构建系统配置

该单体仓库使用 Turbo 进行高效的构建编排

来源:package.json24-29

API 实现

主要的 API 应用位于 apps/api 目录中,提供了 Conduit API 规范的 RESTful 实现。

来源:apps/api/package.json apps/api/prisma/migrations/20241009081140_init/migration.sql

API 脚本

API 应用有多个用于开发和数据库管理的脚本

来源:apps/api/package.json2-10

数据库 Schema

项目使用 Prisma 作为 ORM(对象关系映射)工具,并将 SQLite 作为开发数据库。数据库模式定义在 Prisma 模式文件中,并包含几个关键模型。

来源:apps/api/prisma/migrations/20241009081140_init/migration.sql1-96 apps/api/prisma/dev.db

关键实体关系

数据库模式定义了实体之间几个重要的关系

  1. 用户-文章关系:

    • 一个用户可以创作多篇文章
    • 一个用户可以收藏多篇文章
    • 文章可以被许多用户收藏
  2. 用户-用户关系:

    • 用户可以关注其他用户
    • 这是通过自引用的多对多关系实现的
  3. 文章-评论关系:

    • 一篇文章可以有多条评论
    • 评论属于一篇文章
    • 评论由用户创作
  4. 文章-标签关系:

    • 文章可以有多个标签
    • 标签可以应用于多篇文章

来源:apps/api/prisma/migrations/20241009081140_init/migration.sql42-65

API 规范

API 规范在 api/openapi.yml 文件中以 OpenAPI 格式定义。此规范定义了所有端点、请求/响应格式和认证要求,用于实现 Conduit API。

来源:api/openapi.yml1-836

API 端点摘要

Conduit API 包含以下主要端点组

端点组目的身份验证
/users用户注册和认证部分
/user当前用户管理必填
/profiles/{username}用户资料访问可选
/articles文章创建和检索部分
/articles/feed个性化文章 Feed必填
/articles/{slug}/comments文章评论部分
/articles/{slug}/favorite文章点赞必填
/tags标签列表不需要

来源:api/openapi.yml22-421

GitHub 配置

该仓库包含用于持续集成、issue 模板和其他 GitHub 功能的 GitHub 特定配置。

来源:.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml .github/ISSUE_TEMPLATE/BUG_REPORT.yml .github/CODEOWNERS

开发工作流

处理 RealWorld 仓库的典型开发工作流程涉及几个步骤,如下图所示:

来源:package.json24-29 README.md24-26

包依赖

该项目在不同方面使用了几个关键依赖项

API 包依赖项

依赖项目的
@prisma/client用于数据库访问的 ORM
nitropack服务器框架
bcryptjs密码哈希
jsonwebtokenJWT令牌处理
slugify文章的 Slug 生成

来源:apps/api/package.json14-25

总结

RealWorld 仓库被构建为一个单体仓库,API 规范、参考实现和支持工具之间有清晰的划分。这种组织结构保证了代码的可维护性、组件之间清晰的边界以及代码库中可重用的模式。

项目结构促进了

  1. 遵循 API 规范以确保一致性
  2. 通过 Prisma 模式理解数据模型
  3. 针对规范测试 API 实现
  4. 以可维护的方式添加新功能
  5. 通过 GitHub 为项目做出贡献

有关如何开始开发的更多信息,请参阅 开始使用