返回专题首页

Node.js 专题

基于 Fastify + Prisma 的 Blog API:前置知识储备

前面我们已经把 Node.js 的运行时、工程化和服务开发主线分别拆开理解过了。接下来,是时候把它们放进一个完整项目里了。这一篇先不直接写代码,而是先把 Blog API 的目标、边界、技术选型、环境准备和核心模型对齐清楚。

Node.js 专题第 36 篇 / 40 篇4 分钟

前面我们已经把 Node.js 的运行时、工程化和服务开发主线分别拆开理解过了。接下来,是时候把它们放进一个完整项目里了。这一篇先不直接写代码,而是先把 Blog API 的目标、边界、技术选型、环境准备和核心模型对齐清楚。

这个实战到底要做什么?

这次实战的重点,不是做一个功能特别多的平台,而是做一个足够完整、能代表 Node 服务端关键能力的 Blog API。它至少应该覆盖:

  • 文章资源的基本增删改查;
  • 分类或标签关系;
  • 分页查询;
  • 输入校验与错误处理;
  • 数据持久化;
  • 基础测试与运行约定。

也就是说,我们要的是一个“小而完整”的案例,而不是一个功能炫但结构失焦的 demo。

这个边界非常重要。因为一旦一上来就追求“把博客后台所有能力都做全”,实战很容易被身份体系、富文本、搜索、对象存储、评论审核这些支线拖散。教学型项目最需要守住的,其实不是功能数量,而是主线连续性。

为什么选择 Fastify + Prisma

Fastify 很适合作为这次实战的服务端框架,因为它在性能、插件体系、Schema 协作和服务端基础设施组织上都比较平衡。它不像完全极简方案那样需要你自己拼很多基础设施,也不会像更重的框架那样把结构一次性拉得太大。

Prisma 则很适合做这次持久化层实践,因为它能把数据库模型、客户端调用和类型体验比较顺滑地串起来。对于教学型实战来说,这种“结构清晰、反馈直接”的体验非常适合用来演示服务端工程主线。

所以,这组搭配并不是“唯一最佳”,而是很适合作为这次专题里的教学案例。

更关键的是,这套组合刚好能把前面章节讲过的几条主线串起来:

  • Fastify 负责承接路由、插件、Schema 校验和请求生命周期;
  • Prisma 负责承接模型定义、查询调用和数据库协作;
  • 两者一起让接口契约、工程组织和数据访问形成一个比较清晰的闭环。

开工前最需要对齐什么?

真正开始写代码之前,至少要先明确这些东西:

  • Node 和包管理器版本;
  • 目录结构怎么拆;
  • 数据库用什么;
  • 本地怎么启动;
  • 测试和构建入口是什么;
  • 接口响应和错误格式如何统一。

这些问题如果不先对齐,后面即便代码能跑,项目结构也很容易反复推倒重来。

尤其是目录结构和响应约定,如果前面不定下来,后面每加一个资源都可能重新争论一次:路由放哪、Schema 放哪、服务如何命名、错误怎么返回。实战要学的不只是“写出来”,还包括“怎样让后续每加一个接口都更顺手”。

Blog API 的核心模型该怎么想?

博客项目之所以适合作为教学案例,是因为它既不至于太简单,也不会复杂到失控。它天然会涉及几类典型资源:

  • 文章;
  • 分类;
  • 标签;
  • 分页列表;
  • 详情读取。

这几类资源刚好能把接口设计、关系建模、输入输出校验和服务层拆分一起串起来。

一个比较稳妥的思路,是先把文章资源当主轴,再把分类和标签当成关联能力。这样既能练到最常见的增删改查和分页,也能自然带出多对多关系、筛选查询和输出模型裁剪,不会一开始就把模型复杂度拉得太高。

在真正开工前,什么算“准备充分”?

如果把这一篇当成实战启动前的核对单,那么至少应该做到:

  • 知道本次项目的目标和非目标分别是什么;
  • 确认技术组合只是教学案例,不是唯一真理;
  • 把目录、命令、数据库和响应格式先统一;
  • 对核心资源模型有最小但清晰的定义;
  • 知道本次实战最后要交付的是一个能跑、能测、能继续扩展的 API 基座。

总结

这一篇先把完整实战项目真正开工前需要对齐的内容说明白了:目标范围、技术选型、环境准备和核心模型边界都已经铺开。这样做的意义,不是拖慢进度,而是避免后面一边写一边不断返工。

下一篇我们就会正式进入 Blog API 的开发与接口设计,把这些认知逐步落成代码结构和接口契约。