尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

新手学后端,先掌握这五个核心组件就够了

新手学后端,先掌握这五个核心组件就够了 当我面试后端新人时最常听到的话是“我会用Spring Boot”或“我写过Django项目”。但问到路由匹配的优先级问到中间件如何决定请求的生死问到如何保证数据库事务与业务逻辑的一致性很多人就开始含糊其辞。框架喂养起来的信心在真实后端工程师面前一戳就破。后端不是框架的堆叠而是一套稳定组件的组合。无论技术栈如何轮换路由、请求处理链、数据持久化、认证授权、部署与进程管理——这五个核心组件始终是后端的地基。你花三个月啃框架不如花一个月把这五块积木玩透因为任何框架都只是这五个组件的一种具体编排。路由从URL到代码的翻译器路由是第一道门。新手第一次写接口其实就是在配置路由。路由的本质就是一张映射表把“请求方法URL”映射到“某段代码”。理解这张表比记住任何框架的路由语法都重要。绝大多数框架支持路径参数比如“/users/:id”但你必须问自己如果同时定义了“/users/new”和“/users/:id”请求 /users/new 会命中哪一个不同框架的优先级策略完全不同有些按声明顺序有些按静态优先。路由器是后端最容易出错却最不受重视的组件。新手往往忽略这一点直到线上出现难以解释的404才被迫去读源码。更进一步路由还承载了分组、前缀、命名空间等设计决策。比如给所有API统一加“/api/v1”前缀给管理后台加“/admin”前缀以及如何将不同业务模块的路由拆分到不同文件。如果路由设计得一团糟后面的中间件和权限控制都会跟着变形。建议新手在纸上手写一个简易的路由解析器把请求路径按“/”切分逐段匹配提取参数处理通配符。做完这个练习你会彻底摆脱“照着教程写路由”的状态也就能理解为什么一个成熟框架的路由表需要那么多配置项。请求处理链中间件才是灵魂请求处理器本身并不神秘就是你写的那个函数。但如何组织这些处理器才是后端架构的分水岭。中间件是一条洋葱状的管道请求先经过外层再进入核心响应再反向穿出。日志、CORS、限流、参数校验、鉴权、错误捕获……这些横切关注点都应该在中间件里解决而不是写进业务代码。新手最常见的坏味道是让一个接口函数同时完成数据库查询、权限判断、数据拼装、日志打印、异常返回。这看起来执行效率很高但这样的代码无法测试无法复用也无法在出现安全事件时快速插入一个黑名单中间件。把跨业务的通用逻辑抽离到请求进入业务之前是对“后端工程化”的第一次觉醒。你需要理解中间件的执行顺序尤其是“在 next() 之前做了什么”和“在 next() 之后做了什么”。比如计时中间件在 next() 前记录开始时间等业务完成后再计算耗时。这就是面向切面编程的雏形。同时异常处理也必须是中间件的一部分。一个没有全局错误处理的后端就是一个随时会裸奔的后端。你需要定义统一的错误结构让所有错误都经过同一个出口而不是让框架返回默认的500页面。请刻意练习一下给一个最简单的HTTP框架自己实现三个中间件——日志、鉴权、错误捕获。完成之后你对后端的理解会上一个台阶。数据持久化别把SQL写在业务里新手爱把数据库当“黑箱”需要数据时直接调用一个查询方法。这没有错但后端开发真正的工作量恰恰在数据层周边的细节里。数据持久化的核心不是SQL语法而是连接管理、事务边界和模型映射。如果你用ORM请关闭调试模式看一下每条语句发出的SQL。很多新手在学习时从不看日志导致代码跑得慢都不知道慢在哪。N1查询是新手最容易踩的坑循环查数据库而不是用一条JOIN或预加载。这是性能问题的第一课。如果你用原生SQL那么连接池和事务隔离级别就是必修课。事务不是“begin 之后 commit”那么简单你要理解回滚的时机、锁的范围、以及并发时的脏读与幻读。更实际的是你会遇到“事务里调用外部API”“事务里发消息队列”这些反模式。记住一个原则尽量缩短事务时间把无关操作移出事务。更深一层你要学会把数据访问封装成独立的层。业务代码不直接操作数据库而是通过一个Repository或DAO接口。这样将来替换数据库、增加缓存、或做读写分离时你只需要动这一层。新手会觉得多写一层很麻烦但恰是这一层决定了你的代码是能被改造的还是只能推倒重来。我不建议新手一上来就用最复杂的ORM建议先写SQL再封装最后才体验ORM的便利。三种方式都做过你才算真正理解持久化。举个例子用户列表分页接口新手往往先查出全部记录再循环比对最后在内存里分页。正确的直觉应该是先count再limit让数据库帮你干它擅长的事。数据持久化的本质是让数据流动得正确、高效、可追溯。如果你写出的代码每一条SQL都能在脑中预测出执行计划你就在数据层站稳了脚跟。认证与授权后端的边界感后端开发中几乎没有哪个系统不需要区分“谁在用”和“能用什么”。新手常做的做法是登录成功后随便生成一个字符串放进数据库之后每个请求都拿这个字符串来查用户。这能跑但经不起一点审视。认证解决“你是谁”授权解决“你能做什么”二者必须切开。认证负责验证身份授权负责做出允许或拒绝的决定。如果你把它们混在一起权限模型一复杂代码就会变成一团乱麻。需要掌握的基础知识并不算多密码哈希要用bcrypt或argon2不能明文存储令牌签名要防篡改session与token的区别在于状态放在哪里。如果你想把状态存在客户端就必须保证客户端无法伪造。JWT就是这样的令牌但要小心不要把敏感信息放进payload。授权方面RBAC基于角色的访问控制是绝大多数系统的默认答案。把用户、角色、权限拆成三张表不要直接在用户表里加“isAdmin”布尔字段。即便你只是做一个小Demo也要按这个思路设计因为一旦上线改造权限模型的成本远高于从零设计。另外别忘记“越权”攻击水平越权修改ID查看别人的订单和垂直越权普通用户调管理员接口。防御越权的唯一可靠办法是在每一个业务操作中检查“当前用户是否有权操作这个资源”而不是依赖前端隐藏按钮。请写出一个简单的中间件解析令牌、加载用户、加载角色、检查权限。你会发现后端的边界感正是从这一条链路中建立起来的。部署与进程管理让代码活着最后一个组件却最容易被新手忽略。你在本地跑通项目不算什么一旦到服务器上端口冲突、进程崩溃、环境变量缺失、日志丢失每一个问题都能让你怀疑人生。后端代码写出来不是给人看的是给服务器上的守护进程看的。所谓守护就是灾难发生时依然能站起来。进程托管方面无论是用 pm2 还是 systemd都要保证进程可以自动重启并且知道如何优雅关闭。优雅关闭指的是处理完当前请求再退出而不是被 kill 9 强行抹掉。配置管理上要区分开发、测试、生产环境把数据库地址、密钥、开关全部放在环境变量或配置中心绝不写死在代码里。别忘了日志不要用 console.log 应付一切要区分 info、warn、error要能基于日志快速定位问题。一个连日志都没有的后端就像一架没有黑匣子的飞机出事只能靠猜。Docker 是当下的及格线但不要为了写 Dockerfile 而写你要理解镜像分层、容器生命周期、以及如何把日志输出到标准输出以便收集。新手与资深工程师的分水岭不是谁写的接口更快而是谁能在半夜报警后三分钟内找到问题。学会部署你的代码才真正开始工作。其实部署应该从一开始就考虑而不是最后一步。你写代码时就要想这个配置项将来要放到哪个环境变量里这个临时文件该写到哪个目录这个日志该输出到哪个流带着这些思考写代码才能写出真正“可部署”的后端系统。一个不能自动重启的进程就是一颗定时炸弹一个不写配置环境的环境就是一场人为灾难。结语这五个组件就是全部吗也许五个组件之外还有缓存、消息队列、搜索引擎…… 但那些都是这五个组件之上的扩展。当你用这五个棱镜去观察任何一个后端项目你会发现它们都长着类似的骨架。框架只是让你更快地组装这些组件而不是替代它们。不要用框架的复杂度来掩盖自己对核心组件的无知。路由、中间件、数据、认证、部署这五个词足够撑起你整个后端职业生涯的起点。新手不需要记住所有框架的API只需要反复练习这五个组件的排列组合直到它们成为你的呼吸。到那时你不再是一个“会用框架的人”而是一个能设计后端的人。
返回列表