请求与数据层
请求层里,重点往往不在 fetch 或 axios 这一下调用本身,更重要的是:
- 如何统一错误处理
- 如何做超时、取消、重试和鉴权
- 如何区分服务端状态与本地 UI 状态
- 如何把请求代码从页面里收出去
建议阅读顺序
FetchAxiosHTTP 请求封装认证与刷新 TokenSSEWebSocketSocket.IO轮询 / 长轮询 / 实时通信选型SWR文件上传、下载与断点续传多文件上传队列、拖拽上传与 Worker 压缩TanStack Query
这一组现在覆盖什么
Fetch:原生请求能力、取消、超时、常见封装Axios:实例、拦截器、上传下载、统一错误处理HTTP 请求封装:业务项目里怎么做请求层抽象认证与刷新 Token:登录态、401、刷新和并发重放SSE:服务端单向推送、流式输出和断线重连思路WebSocket:双向实时通信、心跳、重连、鉴权、消息协议和连接治理Socket.IO:事件模型、rooms、ack、自动重连和更完整的实时业务组织方式轮询 / 长轮询 / 实时通信选型:不同实时方案的边界、代价和选型顺序SWR:React 生态里更轻的数据获取路线文件上传、下载与断点续传:进度、blob 下载、分片上传和续传思路多文件上传队列、拖拽上传与 Worker 压缩:多文件、拖拽、并发队列和后台压缩TanStack Query:服务端状态、缓存、失效、乐观更新、Infinite Query、SSR 与进阶模式
Fetch
fetch 是浏览器和现代运行时里最基础的请求能力。它的优点很明显:原生、自带、够轻。真正的问题不在能不能发请求,而在于业务项目里怎么把它用稳。
Axios
Axios 适合放在“请求不只是发出去就完了”的场景里看。它比原生 fetch 重一点,但也把很多项目里常见的事情先收好了:实例、拦截器、超时、统一配置、上传下载进度。
HTTP 请求封装
请求封装的重点,从来都不是“把 GET、POST 写成几个函数”。真正值得做的,是把业务里反复出现的共性问题收掉。
认证与刷新 Token
请求层一旦进入登录态系统,通常都会碰到这几个问题:
SSE(Server-Sent Events)
SSE 很适合放在请求与数据层里看,因为它处理的不是普通接口查询,而是“服务端持续往客户端推送数据流”。
WebSocket
WebSocket 更适合放在请求与数据层里看,因为它处理的不是“某个请求怎么发出去”,而是“连接建立之后,客户端和服务端怎么持续交换消息”。
Socket.IO
很多团队第一次做实时能力时,会先在两个方向里选一个:
轮询 / 长轮询 / 实时通信选型
实时通信的方案很容易一上来就被问成“到底用 WebSocket 还是 SSE”。
SWR
SWR 是 React 生态里另一条很常见的数据获取路线。和 TanStack Query 相比,它通常显得更轻、更克制,尤其适合“页面取数为主,缓存和重取也要有,但不一定要把整套服务端状态系统搭满”的项目。
文件上传、下载与断点续传
请求层一旦碰到文件,复杂度就会明显上来。普通 JSON 接口关注的是数据结构,文件链路更常见的问题是:
TanStack Query
8 个项目
多文件上传队列、拖拽上传与 Worker 压缩
文件上传一旦从“单文件按钮”走到真实业务,通常很快会碰到这几层: