agency4api

1.5.0 • Public • Published

agency4api

首页 示例

简体中文 | English

功能介绍

  1. 集成轻量的数据服务(增删改查)到具体项目里,提高前端开发和调试的效率
  2. 实现离线调试,减少对服务端依赖:解决接口请求慢、接口异常、服务器部署更新无法访问、后端服务打断点等
  3. 模拟 http 状态码(404,500)、接口延时等
  4. 模拟简易 websocket 请求

    配合 webpack 项目的使用,示例项目地址: https://gitee.com/zhaolongwei_zlw/agency4api-demo 。agency4api 并不依赖 webpack

安装教程

  1. npm i agency4api

webpack 集成 - agency4api 实例

if(process.env.NODE_ENV === 'development'){ //开发态注入 agency4api
  let agency4apiWebpack = require('agency4api')('webpack');
  let proxyConfig = agency4apiWebpack.getProxyConfig({
    // 需要处理devServe.proxy
    proxy: config.server.proxy,
    // 需要处理的host的数组,如: ['baidu.com:8080'],localhost不用添加
    acceptHosts: null,
    // 初始化 agency4api 配置文件的options
    initAgency4apiOptions: {
      ignoreQuery: ['t']
    },
    // 保存配置文件的目录的绝对路径
    relativeFolder: path.resolve('./agency4api')
  });
  //使用rules注入 agency4api
  let rules = agency4apiWebpack.getInsertRules([/src[\\/]index.js$/], function(){ // 此函数可以不传
    return {
      prepend: `require('agency4api/development.js');`, // 不传此函数时的默认值
      append: ''
    }
  });

  config.module.rules.push(...rules);
  config.devServer.proxy = proxyConfig.proxy;
}

vite 集成 - agency4api 实例

if(process.env.NODE_ENV === 'development'){ //开发态注入 agency4api
  let agency4apiVite = require('agency4api')('vite');
  let proxyConfig = agency4apiVite.getProxyConfig({
    // 需要处理 vite.serve.proxy
    proxy: config.server.proxy,
    // 需要处理的host的数组,如: ['baidu.com:8080'],localhost不用添加
    acceptHosts: null,
    // 初始化 agency4api 配置文件的options
    initAgency4apiOptions: {
      ignoreQuery: ['t']
    },
    // 保存配置文件的目录的绝对路径
    relativeFolder: path.resolve('./agency4api')
  });
  config.plugins.push(agency4apiVite.ViteAdjustPlugin([/src[\\/]main.js$/],
    `import 'agency4api/development.js'` //第二个参数可以不传,此是默认值
  ));
  config.server.proxy = config.server.proxy || {};
  Object.assign(config.server.proxy, proxyConfig.proxy);
}

API

  1. 静态属性
let Agency4api = require('agency4api');
/*
//扩展文件buffer信息,可以进行扩展
{
    13780: 'png',
    255216: 'jpg',
    7173: 'gif',
    6677: 'bmp'
}
*/
Agency4api.extnameByBufferMap;
//获取当前支持的扩展文件
Agency4api.getImagesExtnameMap();
//通过buffer数据,获取文件名扩展名,未识别则返回undefined。用于处理图片等数据
Agency4api.getExtnameByBuffer();
  1. 实例化
let Agency4api = require('agency4api');

let agency4api = new Agency4api({ //agency4api支持多实例
  configPath: '', //自定义配置文件绝对的路径, agency4api 会自动创建
  options: { //用于覆盖默认参数
    mockdataFolder: '', //缓存数据的存储目录
  },
  hashMethod: function (str) { //生成hash值的回调
    let crypto = require('crypto'); //crypto 或者 其它工具
    let md5Str = '';
    let md5sum = crypto.createHash('md5');
    md5sum.update(String(str));
    md5Str = md5sum.digest('hex');
    return md5Str; //返回生成好的hash值
  }
}
  1. 缓存数据到本地文件
//以keyPath(如: /aaa/bbb/xxx)和具体的query(url参数)、param(post请求时的json参数)缓存数据
agency4api.setApiData({
  extname: 'json', //可以是 extnameByBufferMap 的图片
  keyPath: '/aaa/xxx',
  query: {name: 'test'},
  param: '{"age": 12}',
  async: false,
  data: '{"message": "YES"}'
});
//在缓存文件中,以key为关键值模糊搜索,把 data 数据写入(覆盖)匹配的第一个文件
agency4api.setApiData({extname: 'json' ,key: '缓存文件中的子字符串', data: '{"message": "YES"}'});
  1. 获取缓存文件
//以key为关键值,在缓存文件中,模糊搜索到第一个文件,返回文件中的数据
agency4api.getApiData({key});
//以keyPath(api)和具体的query(url参数)、param(post请求时的json参数)精确搜索
agency4api.getApiData({keyPath, query, param});
//获取缓存区的最近的文件信息(包括文件的绝对路径)
agency4api.getApiDataListInfo({number: 100});
  1. 删除缓存文件
//以key为关键值,在缓存文件中,模糊搜索到第一个文件,删除
agency4api.delApiData({key: '缓存文件中的子字符串'});
//以keyPath(api),搜索keyPath对应的文件(不考虑api的参数),将匹配结果全部删除
agency4api.delApiData({keyPath});
//删除 config.options中autoAgencyFolder 或 config.paths[pathGroupName] 其中一个目录,决定于keyPath是否不在config.paths中
agency4api.delApiData({ keyPath, isClear: true });
//删除全部缓存文件,包括config.options.recycleFolder中的文件,谨慎使用
agency4api.delApiData({ isClearAll: true });
//filePathList 缓存文件的绝对路径的数组
agency4api.delApiData({filePathList: [缓存文件的绝对路径]});
  1. 手动缓存
//将当前缓存文件备份到 config.options.recycleFolder 目录中
agency4api.recycleApiData({stemp}); // stemp可以不传,缓存时候的唯一标识
  1. 判断
//判断具体api是否用 agency4api 处理
//!!config.paths[keyPath] || (config.options.isAutoAgency && config.paths[keyPath] == null)
agency4api.needAgencyApiData(keyPath);
  1. 其它
//切换 config.options.isAutoAgency 状态,并回写到配置文件中
agency4api.changeAutoAgency();
//切换 config.options.isAutoRefresh 状态,并回写到配置文件中
agency4api.changeAutoRefresh();
//设置 api 在 config.paths 中的apiState: ['none','onlyQuery','onlyParam', 'all' or true, false, 'folder']
agency4api.setPaths(pathGroupName, keyPath, apiState);
//设置 api 在 config.paths 对应清空
agency4api.clearPaths(pathGroupName);
//通过 key 值,搜索缓存文件,并执行each回调
agency4api.searchFilenameByKey(key, each);
//获取最新的配置信息
agency4api.getLastConfigFile();

配置文件

{
  options: {
    // 需要处理的host数组(localhost默认需要处理),如['baidu.com:9090']
    // 不配置,则除了localhost,需要host不支持调试功能
    acceptHosts: null,

    //本地文件存储目录名称
    mockdataFolder: path.resolve(__dirname, './mockdata/'),

    // mock文件夹最大占存储量(单位:G)
    maxMockdataFolderSize: 3,

    //isAutoAgency: true 时,api 存储的目录名称
    autoAgencyFolder: 'autoAgency',

    //缓存区目录的名称,在 mockdataFolder 下
    recycleFolder: 'recycle',

    // 当前代理的统一http(?)状态码,如 404
    statusCode: null,

    //需要自动缓存的时间(单位:天)
    //比如当前是 2020-05-08,会把 2020-05-01之前 autoTimeout 天的文件,都复制(常用接口)/剪切(非常用接口)到recycleFolder目录中
    "autoTimeout": 7,

    //删除过期缓存文件的时间(单位:天)
		"autoClearTime": 7,

    //true: 保存文件到 autoAgencyFolder 目录下
    isAutoAgency: false,

    //添加到json中的信息
    addMessage: 'the agency data ',

    //要添加的信息的字段
    //例: addMessageProp: 'agency4api',数据为{},效果为 {agency4api: autoId + addMessage}
    addMessageProp: 'agency4api',

    //替换api中斜杠
    //注意:obliqueReplace 需要拼接到正则表达式中,请考虑是否需要转义
    obliqueReplace: '+',
    //参数与api的分隔符
    //例: url为 test?aaa,生成代理文件名称为test;aaa.json
    joinReplace: ';',
    //例: url为 test?aaa=123,生成代理文件名称为test;aaa,123.json
    "queryJoinReplace": ",",
    //忽略指定url参数,处理如url上添加随机参数的情况,数组,如 ['t']
    "ignoreQuery": null
  },
  // 常用接口,优先级高
  "paths": {
    //pathGroup 路径分组
    "common": {
      // false: 强制忽略
      // 'none' 不考虑任何参数
      // 'onlyQuery' 只考虑url上的参数
      // 'onlyParam' 只考虑post上的参数(application/json)
      // 'all' 考虑所有参数
      // 'folder' 设置为目录,此目录下的所有api
      "/t/e/s/t": false
    },
    "manual": {
        "/t/e/s/t": false
    }
  }
}

自动清理

  1. 当文件最后修改日期,在 confin.autoTimeout 前,会复制 config.paths[pathGroupName] 和 剪切 config.autoAgencyFolder 目录中的文件 到 config.recycleFolder 中
  2. 当文件最后修改日期,在 confin.autoTimeout + autoClearTime 前,config.recycleFolder 目录中的文件会被删除

Package Sidebar

Install

npm i agency4api

Weekly Downloads

4

Version

1.5.0

License

MIT

Unpacked Size

1.59 MB

Total Files

17

Last publish

Collaborators

  • zhaolongwei_zlw