换个角度想
中间件像机场的安检通道:不管你飞哪儿,都先过同样几道关——查身份、称行李、留记录。目的地各不相同,通道却是公用的:一次搭好,所有航班共享。
术语 · 后端
Middleware
在请求到达核心逻辑前后执行的通用处理,例如鉴权、日志或限流。
一条公用的通道
GET/orders
凭证有效
中间件像机场的安检通道:不管你飞哪儿,都先过同样几道关——查身份、称行李、留记录。目的地各不相同,通道却是公用的:一次搭好,所有航班共享。
凭证有效(没有)
log: user_42 GET /orders
顺手记一笔,继续往前
请求进入通道
登录校验写一次,所有要保护的 endpoint 共享。
日志和耗时统计在通道里顺手完成,业务代码保持干净。
同一个来源请求太猛?在通道口就拦下,别打进业务。
十个 endpoint 都需要登录才能访问。把校验代码复制十份,还是有更好的办法?
写一个鉴权中间件,挂在这十个 endpoint 前面。校验逻辑只有一份,改一次全体生效——和组件「一处修改、处处生效」是同一个道理。
中间件的顺序就是流水线的顺序:日志放在鉴权前还是后,记下来的东西完全不同。加中间件时,想清楚它站在队伍的第几位。