章节摘要:本章跟着一次真正的业务请求进层——它带着路径与方法撞进路由,带着查询串、请求体与请求头涌向参数解析,有时还拖着一份文件字节流。路由匹配、RESTful 设计、参数校验、文件流处理,四站走完,"进层"这半程就通了。
第 3 章装配好的洋葱已经就位,本章主线盯住一个具体接口:POST /api/v1/orders,创建一笔订单。这个看似普通的请求会依次经过路由匹配(路径与方法怎么对上号)、RESTful 语义审查(资源怎么建模、状态码怎么选)、参数解析(query、body、headers、路径参数各自从哪来、怎么验),遇到带附件的变体时还要过文件流这一站。盯住一个接口的好处是每节学到的知识都立刻有落点——4.1 让请求找到归宿,4.2 让归宿符合语义,4.3 让输入可信,4.4 处理变体。走完本章,你写出的每个接口都能回答"我的参数从哪来、凭什么可信、错了谁负责"。
本章的拐点在 4.3:很多团队的路由处理器里散落着 if (!query.id) throw ... 这样的零散校验,写多了才发现校验逻辑比业务逻辑还长。转折在于把"参数合法"从事中检查前移为层上的前置事实——请求穿过校验层之后,处理器面对的参数已经是可信的、规范的、带类型的。结论是:路由负责找到归宿,校验负责保证输入,处理器只写业务——三者各管一段,接口的复杂度才不会随数量线性爆炸。
一次请求的进层路径如下图。

把本章的工程立场提前立在这,四条军规贯穿四节。其一,路由表即文档:资源命名、方法齐备性、鉴权挂载情况,看路由声明就能读出一半——写路由时保持这份自觉,命名与层次自然不跑偏。其二,动词不进路径:业务动作先翻译成资源与方法,实在表达不了的迁移动作才用名词化子资源(如取消订单),/deleteOrder 这类设计在本章活不过评审。其三,输入一律先验后用:校验层挡结构、业务层挡越界,处理器里不该出现裸的 if 校验。其四,字节流走流不走内存:上传下载都让数据分块流动,内存占用与文件大小脱钩,这是文件接口能在生产活着的底线。
请求处理完毕,响应怎么体面地出去?下一章调转方向进入"出层"半程:状态码与响应头的最终控制、多格式响应、内容协商与静态资源缓存——那是洋葱的右半弧,也是用户真正感知到的部分。