前面我们已经把 Node.js 的运行时、工程化和服务开发主线分别拆开理解过了。接下来,是时候把它们放进一个完整项目里了。这一篇先不直接写代码,而是先把 Blog API 的目标、边界、技术选型、环境准备和核心模型对齐清楚。
这个实战到底要做什么?
这次实战的重点,不是做一个功能特别多的平台,而是做一个足够完整、能代表 Node 服务端关键能力的 Blog API。它至少应该覆盖:
- 文章资源的基本增删改查;
- 分类或标签关系;
- 分页查询;
- 输入校验与错误处理;
- 数据持久化;
- 基础测试与运行约定。
也就是说,我们要的是一个“小而完整”的案例,而不是一个功能炫但结构失焦的 demo。
这个边界非常重要。因为一旦一上来就追求“把博客后台所有能力都做全”,实战很容易被身份体系、富文本、搜索、对象存储、评论审核这些支线拖散。教学型项目最需要守住的,其实不是功能数量,而是主线连续性。
为什么选择 Fastify + Prisma?
Fastify 很适合作为这次实战的服务端框架,因为它在性能、插件体系、Schema 协作和服务端基础设施组织上都比较平衡。它不像完全极简方案那样需要你自己拼很多基础设施,也不会像更重的框架那样把结构一次性拉得太大。
Prisma 则很适合做这次持久化层实践,因为它能把数据库模型、客户端调用和类型体验比较顺滑地串起来。对于教学型实战来说,这种“结构清晰、反馈直接”的体验非常适合用来演示服务端工程主线。
所以,这组搭配并不是“唯一最佳”,而是很适合作为这次专题里的教学案例。
更关键的是,这套组合刚好能把前面章节讲过的几条主线串起来:
Fastify负责承接路由、插件、Schema 校验和请求生命周期;Prisma负责承接模型定义、查询调用和数据库协作;- 两者一起让接口契约、工程组织和数据访问形成一个比较清晰的闭环。
开工前最需要对齐什么?
真正开始写代码之前,至少要先明确这些东西:
- Node 和包管理器版本;
- 目录结构怎么拆;
- 数据库用什么;
- 本地怎么启动;
- 测试和构建入口是什么;
- 接口响应和错误格式如何统一。
这些问题如果不先对齐,后面即便代码能跑,项目结构也很容易反复推倒重来。
尤其是目录结构和响应约定,如果前面不定下来,后面每加一个资源都可能重新争论一次:路由放哪、Schema 放哪、服务如何命名、错误怎么返回。实战要学的不只是“写出来”,还包括“怎样让后续每加一个接口都更顺手”。
Blog API 的核心模型该怎么想?
博客项目之所以适合作为教学案例,是因为它既不至于太简单,也不会复杂到失控。它天然会涉及几类典型资源:
- 文章;
- 分类;
- 标签;
- 分页列表;
- 详情读取。
这几类资源刚好能把接口设计、关系建模、输入输出校验和服务层拆分一起串起来。
一个比较稳妥的思路,是先把文章资源当主轴,再把分类和标签当成关联能力。这样既能练到最常见的增删改查和分页,也能自然带出多对多关系、筛选查询和输出模型裁剪,不会一开始就把模型复杂度拉得太高。
在真正开工前,什么算“准备充分”?
如果把这一篇当成实战启动前的核对单,那么至少应该做到:
- 知道本次项目的目标和非目标分别是什么;
- 确认技术组合只是教学案例,不是唯一真理;
- 把目录、命令、数据库和响应格式先统一;
- 对核心资源模型有最小但清晰的定义;
- 知道本次实战最后要交付的是一个能跑、能测、能继续扩展的 API 基座。
总结
这一篇先把完整实战项目真正开工前需要对齐的内容说明白了:目标范围、技术选型、环境准备和核心模型边界都已经铺开。这样做的意义,不是拖慢进度,而是避免后面一边写一边不断返工。
下一篇我们就会正式进入 Blog API 的开发与接口设计,把这些认知逐步落成代码结构和接口契约。