网络请求方法需要考虑:语义、协议、公共参数、数据格式、编码解码、异步、跨域、cookie、异常处理、数据上报、progess/loading、abort、timeout、安全(风控、加密等)、登录态校验、同构等等。

其中最困难的就是协议,因为其它的基本都可以靠前端自行解决,而协议是前端与服务端对数据格式的一套约定,这种约定往往很难统一标准。比如最简单的一些规则:更适合用 get 就不要 post,get 参数从 query 里取,post 参数从 data 里取……常常都不是统一的,更何况返回的数据格式用什么表示正常,用什么表示异常,用什么表示“正常的异常”,可能就更难统一了。之所以“约定大于配置”是一条黄金定律,是因为大家都知道好并且往往没做到。

一种理想的返回格式:

{
code: 0 // 0 表示正常;负数表示异常;正数表示正常的异常
message:'' // 可以透传展示给用户的提示信息
data: {} // json 格式的数据,异常情况最好返回 '' 或 null
error: '' // 服务端捕获的错误信息
}
展开
4