stonexer / yab

🐈 A fetch library
4 stars 0 forks source link

前端请求库对比 #7

Open leohxj opened 5 years ago

leohxj commented 5 years ago

前端提到网络请求通常是指浏览器,但现在随着 Node.js、小程序的出现,网络请求不再局限于浏览器。

实现原理

浏览器端

基于 XHR 或 Fetch 实现。

node.js

基于node自带的 ttp/https/http2 模块实现 http 请求。

其他

比如各种小程序,比如微信的 wx.request, 支付宝的 my.httpRequest. 都是自己封装的请求模块。

如何抹平调用一致性

最常见的场景就是同构模块,建议将实际发送请求的模块做封装,依据不同环境做实例化。对不同环境提供不同的入口文件,通过打包工具自动载入(基于 package.json 的 browser/main 字段)或自行引入指定文件。

请求库对比

特点 基于 Fetch 支持 Promise 支持环境 兼容性
axios - 请求可取消
- 可设置超时
- 支持 CSRF
:x: :white_check_mark: browser/Node.js ie 11+
umi-request - url 参数自动序列化
- post 数据提交方式简化
- response 返回处理简化
- api 超时支持
- api 请求缓存支持
- 支持处理 gbk 类 axios 的 request 和 response 拦截器(interceptors)支持
- 统一的错误处理方式
:white_check_mark: :white_check_mark: 依赖 whatwg-fetch
fly.js - 提供统一的 Promise API。
- 浏览器环境下,轻量且非常轻量
- 支持多种JavaScript 运行环境

- 支持请求/响应拦截器。
- 自动转换 JSON 数据。
- 支持切换底层 Http Engine,可轻松适配各种运行环境
- 浏览器端支持全局Ajax拦截 。
-
H5页面内嵌到原生 APP 中时,支持将 http 请求转发到 Native。支持直接请求图片
:x: :white_check_mark: broswer/Node.js/小程序 > ie8
Superagent 支持插件概念 browser/Node.js Node: v6.x+
- ie9+
request - 文件支持流式读取
- 支持 Form 数据格式
- 自定义 http header
Node.js
r2 - request 作者基于 fetch 开发的 :white_check_mark: :white_check_mark: 基于 whatwg-fetch
isomorphic-fetch - 只是封装了两个 fetch 库??? :white_check_mark: :white_check_mark: browser/Node.js whatwg-fetch
- node-fetch
got 作者觉得觉得 request 太臃肿了
- 支持取消请求
- 支持缓存
Node.js
ky Simpler API
- Method shortcuts (ky.post())
- Treats non-2xx status codes as errors
- Retries failed requests
- JSON option
- Timeout support
- URL prefix option
- Instances with custom defaults
- Hooks
Broswer whatwg-fetch

基于 RxJS

还有一部分请求库,返回的不是 Promise 对象,而是 Observable 对象, 基于 RxJS 做的封装。

参考

stonexer commented 5 years ago

这个库不搞出来简直对不起你

leohxj commented 5 years ago

补下知识而已,学习学习

leohxj commented 5 years ago

添加几个带中间件概念的库: