@shushu.pro/easyapi

前端开发 API 系统,支持数据适配器,mock 生成器,支持 RESTFul 方式接口,可以普遍在 vue 或者 react 的 api 相关模块中使用

Usage no npm install needed!

<script type="module">
  import shushuProEasyapi from 'https://cdn.skypack.dev/@shushu.pro/easyapi';
</script>

README

@shushu.pro/easyapi

前端开发 API 系统,支持数据适配器,mock 生成器,支持 RESTFul 方式接口,可以普遍在 vue 或者 react 的 api 相关模块中使用

开发目的

  • 解决前端接口管理维护的问题
  • 解决前端接口调试困难的问题
  • 解决前端接口数据 mock 的问题
  • 解决数据处理问题
  • 解决前端接口前后端字段不统一的问题

组件特点

  • 以配置文件的方式实现接口的定义
  • 以声明的方式实现动态 mock 数据的生成
  • 支持自定义的扩展配置项实现复杂的功能
  • 支持 promise 和 callback 模式无缝使用
  • 支持完整的调试信息输出
  • 支持前后端数据快速适配
  • 支持配置接口缓存提升性能

配置说明

应用中使用接口获取数据

// promise模式
$api
  .getData({ id: 1 })
  .then((responseObject) => {
    // responseObject包含返回的headers,body和config
    // 处理数据
  })
  .catch((err) => {
    // 处理异常
  });

// callback模式
$api.getData({ id: 1 }, (responseObject, err) => {
  if (err) {
    // 错误处理
  }
  // data
});

接口配置项

const configs = {};

// 以配置项的key作为接口调用的名称
configs.getData = {
  method: 'get', // 请求方式,默认get
  url: '/data/:id', // 接口地址
  mock(config) {
    // params 请求的参数
    // header 请求头
    return {
      $body: {
        // 响应的数据
      },
      $headers: {
        // 响应头
      },
    };
  },
  delay: 1000, // 模拟延迟1000ms
  request: {
    // 请求适配器
  },
  response: {
    // 响应适配器
  },
};

组件安装配置

yarn add @shushu.pro/easyapi
import easyapi from '@shushu.pro/easyapi';
const $api = easyapi({
  baseURL: '', // 基础路径
  timeout: 2000, // 接口超时时间,也可以单独在config中配置某个接口的超时时间
  configs: {
    // 接口配置项
  },

  request(config) {
    // 接口请求时拦截器
    // 预处理请求数据或者直接拦截请求返回mock数据
  },
  response(rconfig) {
    // 接口响应拦截器
    // 预处理响应数据,比如返回自定义的逻辑错误
  },
  success(config) {
    // 正确响应处理器
    // 数据预处理
  },
  failure(config) {
    // 错误响应处理器
    // 错误统一处理,比如登录失效等
  },
});

config 接口

数据值

  • config.sendData 请求提交的数据,由 method 决定是 params 还是 data
  • config.meta 所有的配置项数据,比如:methodurl
  • config.responseObject,请求响应数据,包含请求头(headers),请求体(body)和请求配置项(config)
  • config.error 错误信息,存放遇到的错误信息

可以修改 config 对应的数据来实现数据的处理和请求参数的处理

示例

import easyapi from '@shushu.pro/easyapi';
import adapter from '@shushu.pro/adapter';

const $api = easyapi({
  baseURL: '/api/', // 基础路径
  timeout: 30000, // 接口超时时间,也可以单独在config中配置某个接口的超时时间
  configs: {
    // 接口配置项
  },

  request(config) {
    // 请求数据转化
    const { request } = config.meta;
    if (typeof request === 'function') {
      config.sendData = request(config.sendData);
    } else if (request && typeof request === 'object') {
      config.sendData = adapter(request, config.sendData);
    }
  },
  response(config) {
    // 对响应的数据做处理
    const { data } = config.responseObject;
    const { code } = data;

    if (code === 1008) {
      throw Error('NO-LOGIN');
    }

    if (code !== 0) {
      throw Error(data.message);
    }
  },
  success(config) {
    // 正确响应处理器
    const { data } = config.responseObject;
    const { response } = config.meta;
    // 响应数据转化
    if (typeof response === 'function') {
      config.responseObject.data = response(data);
    } else if (response && typeof response === 'object') {
      config.responseObject.data = adapter(response, data);
    }
  },
  failure(config) {
    // 错误响应处理器
    if (config.preventDefaultError) {
      return;
    }
    if (error.message === 'NO-LOGIN') {
      return alert('登录失效');
    }
    alert(error.message);
  },
});