natty-fetch

A natty semantic data-fetching tool for project that no longer needs to use jQuery/Zepto's Ajax.


Keywords
natty-fetch, data, database, db, ajax, mobile-ajax, get, post, jsonp, query, fetch, micro-ajax, mini-ajax, standalone-ajax, micro-jsonp, mini-jsonp, standalone-jsonp, promise-api
License
MIT
Install
npm install natty-fetch@2.6.0

Documentation

oner-io

npm version download license

v3.x

新名字oner-io,名称空间onerIO

oner-io是这个工具的新名字(原名叫natty-fetch),新名字意为着新起点,从此,该工具从原来的个人(jias)维护,变为数澜科技前端团队(oner-team)维护。

  • oner-iov3.0.0开始发布(还未发布),就是natty-fetch@3.0.0的计划,有破坏性升级,当然也更好用了。
  • 🍉natty-fetch的一切内容都在当前仓库的natty-fetch分支中。
  • 🍉natty-fetchbug,在2019年依然会继续修复并发包。

定位

🍔 很多人问起,oner-io是原生fetch的扩展吗?,或者oner-ioaxios有什么区别?所以统一回答一下:

oner-io的定位并不是另一个ajax/jsonp工具,而是多人协作时定义接口和使用接口的一套规范,特别是项目接口来至多个后台系统时。

业界有名气的ajax工具,功能强大的有很多,如果只是找工具,轻量级的可以使用axios,重量级的可以使用bluebird。如果是希望找到团队多人协作的规范,使用oner-io

那么,知道了oner-io的定位,小伙伴们就可以理解,使用这套规范(多人协作时定义接口和使用接口的规范),一定是会有一点点代价的,一定会比axios这种纯工具,在使用时,多出一点点配置,但非常值得!

目前功能的缺失:文件上传功能,建议使用专业文件上传组件。

🍻 开发者的体验至关重要!在微小的技术点上追求极致的开发体验。如果对你有帮助,请考虑Star一下。

特点

强大的缓存

项目中经常遇到一些相对稳定的数据,如省市列表、差旅性质、任务类别、币种类别等等。这些数据通常根据业务需要或客观变化才更新一次,虽然更新慢,但又必须更新。在请求这些数据时,可以借助oner-io强大的缓存(如:缓存的三种有效性判断,缓存的降级处理),分分钟完成异步数据的缓存实现。

名称空间支持

我们在大型项目中会经常碰见一种情况,不同的业务模块有着很多非常相似(甚至相同)的数据接口。这种级别的项目,如果在一开始没有做好足够的名称空间规划,后期一定会逐步进入"命名冲突"的大坑。oner-io专为大项目而生,在名称空间方面做足了设计,层级不限,书写灵活,使用者只需关心如何规划即可。

很多老项目,各种原因,经历过多个团队的开发,后续的接手人,要么梳理得很辛苦,要么以更特殊的命名方式继续堆接口...,吐槽是不解决问题的,oner-io走起吧!

数据适配约定

无论是XMLHttpRequest,还是fetch,业务逻辑的错误都是作为成功响应(response)的数据一起返回的,但通常情况我们需要将这种错误从response中分离出来,进而reject这次请求。这是一项重复的工作。oner-io把这种重复的工作提取为一项配置,即数据适配(fit),让业务逻辑错误直接走向reject,进而resolve拿到的数据是代表业务逻辑成功的数据,无需判断,直接可用。

业务逻辑错误的举例:"您已投过票啦,不能重复投票!","您的操作权限不够!"

多上下文支持

当项目需要调用多个后台系统的数据接口时,清晰地实现各自系统的通用配置是非常好的编程习惯(利人利己)。想象一下,假设其中一个系统的所有接口需要添加token参数时,在该系统的上下文配置中修改一处即可实现,是多么惬意的事情。不仅如此,oner-io还提供了三个层级的配置,由上至下分别是全局配置(Global),上下文配置(Context)和接口配置(API),上游配置作为下游配置的默认值,同时又被下游配置所覆盖。

插件机制

一方面,借助插件机制,可以将项目中已经存在的任何(是的,不管有多少种)数据获取方案统一化。统一后的原有方案直接拥有"名称空间支持"、"多上下文支持"、"数据适配约定"、"强大的缓存"等oner-io特色功能。另一方面,插件机制也可以用于扩展接口的使用方式,比如内置的loop插件,只需一行配置,就可以快速让一个接口拥有轮询功能。

兼容至IE8

如果项目仅支持现代(Modern)浏览器,推荐使用oner-io.min.js。如果需要兼容到IE8,则必须使用oner-io.pc.min.jsPromise Polyfill

v3.x docs

文档

Compatibility

  • H5版本:iPhone4+、Android2.3+
  • PC版本:IE8+、Edge、Chrome、Safari、Firefox

Get help

  • 钉钉账号:拂山
  • 微信账号:加拂山的微信(gnosaij),备注一下oner,会被拉到oner工具群。

Dev && Build

Node需要7以上的版本

启动开发环境
$ npm install
$ npm start

构建
$ npm build

Important References