1.9.6 • Published 2 months ago

@rockyf/easy-api v1.9.6

Weekly downloads
-
License
MIT
Repository
-
Last release
2 months ago

easy-api

简易的api请求封装,基于fetch

附带接口集合生成器(gen-api)

安装

npm i -S @iscdev/easy-api

使用

import {callApi} from '@iscdev/easy-api'

callApi('https://xxx.com/aaa/bbb', {...options})

api

callApi 调用api接口

定义:function callApi(url: string, options?: CallApiOptions)

参数

  • url: string,待请求的链接,相对路径和绝对路径皆可
  • options?: CallApiOptions,配置

CallApiOptions 配置属性

  • method?: 'GET' | 'POST' | 'DELETE' | 'PUT',请求方法, 默认:'GET'
  • headers?: 键值对,头信息
  • params?: 任何,数据
  • requestContentType?: 'form-data' | 'form-urlencoded' | 'json' | 'raw' | 'binary',请求体类型,默认:'json'
  • plugins?: Plugin[],插件集合
  • parseResponseFunc?: ResponseParseFunc,响应体解析方法,默认为code/data的风格

返回值

Promise<any>

默认情况下,如果请求成功则返回data字段,如果失败或者网络异常则抛出异常,具体看parseResponseFunc配置的解析风格

pollingApi 轮询api接口

定义:pollingApi<T>(callApiFunc: () => Promise<T>, options?: PollingApiOptions<T>): () => void

参数

  • callApiFunc: () => Promise<T>,一个callApi的请求
  • options?: PollingApiOptions<T>,配置

PollingApiOptions 配置属性

  • interval?: number,间隔,默认:1000ms
  • times?: number,次数,小于0表示无限轮询,大于0表示有限次数轮询,等于0表示不请求也不轮询,默认:-1
  • onResponse?: (data: T) => boolean | void,消息回调方法,如果方法返回true则终止轮询
  • onError?: (error: Error | CodeError) => boolean | void,错误回调方法,如果方法返回true则继续轮询,优先级高于interruptWhenError
  • interruptWhenError?: boolean,当发生错误时终止轮训,默认:true

返回值

返回一个方法,调用即可终止轮询

插件

支持插件系统

内置了一个插件:apiLogger,用于在控制台打印接口调用日志

也可以自己开发插件,只要实现如下接口即可:

interface Plugin {
    /*请求初始化*/
    init?: (context: FetchContext) => boolean | void
    /*请求前*/
    beforeCall?: (context: FetchContext) => boolean | void
    /*遇到网络错误*/
    onCatchNetError?: (context: FetchContext) => boolean | void
    /*请求后*/
    afterCall?: (context: FetchContext) => boolean | void
    /*遇到接口错误*/
    onCatchError?: (context: FetchContext) => boolean | void
}

使用

插件的使用分为全局设置和单次设置

全局设置

callApi.plugins = [apiLogger({ beauty: true })];
只要在设置callApi.plugins即可直接修改全局的插件列表,此后的所有请求都会应用这些插件

单次设置

callApi('https://xxx.com/aaa/bbb', {plugins:[apiLogger({ beauty: true })]})
这样设置的插件仅对该次请求有效

注意:单次设置的插件先于全局设置的插件

接口集合生成器cli

call-api只是暴露出来的较为低级的api,实际开发中会将其进行二次封装。本库提供了buildApiCollection方法,来生成接口集合

接口集合构造器

定义:function buildApiCollection<T>(apiConfigs:any, apis?:any): Proxy<T>

参数

  • apiConfigs:键值对,接口配置,会通过生成器生成的
  • apis?:object,传入原始的api集合对象

返回值

Proxy<T> 返回一个代理对象即为接口集合实例,泛型是调用时传入的,泛型类型也是生成器生成的,可以直接在对象上点出接口分组和接口名( 如果调用时传入泛型T的话)

接口集合实例说明

  • 为了能通过字面量来编写调用代码,所以分组名和接口名都会转换成驼峰式的
  • 如果同一个接口链接通过method来区分功能的,则会直接使用形如.get, .post, .delete的方法名来补全
  • 如果链接完整,也会使用method来做为方法名的前缀,如:getStatusList, postSaveByProductKey

返回值为Promise<xxx>,其中xxx为传入的泛型类型

cli使用

只要安装了@isc-dev/easy-api就可以使用该cli,也可以全局安装

目前仅支持swagger的文档转换

参数

  • -i --input 文档接口地址或者导出的json文档
  • -o --output 输出目录, 如: "src/api" (默认: ".")
  • -r --root-path 接口url的根路径, 如: "/api/bios/ibms-basic" (默认: "")
  • -n --namespace 命名空间, 如: "basic" (默认: "")
  • -h --headers <string...> 头部信息,一般用于鉴权 , 如: "Cookie:abc=123"

例子:
gen-api -o src/api -n basic -r /api/bios/ibms-basic -i 'http://10.30.30.87:38080/api/bios/ibms-basic/v3/api-docs' -h 'Cookie: X-Isyscore-Permission-Sid=1e4617a5-394c-44ba-be7a-fbde72cfce08'
或使用本地swagger导出的json文件
gen-api -o src/api -n basic -r /api/bios/ibms-basic -i '/aaa/bbb.json'

如果生成成功,则会在输出目录写入两个文件,这两个文件需配合使用

  1. 命名空间-types.d.ts 接口定义文件
  2. 命名空间-configs.json 接口配置文件

命名空间即为命令行执行是传入的-n参数,下面以basic举例

然后就可以暴露出接口集合实例了:

import basicConfig from './basic-configs.json';
import {basic} from '@/api/basic-types';

export const basicApi = buildApiCollection<basic.IApis>(basicConfig);

随后即可使用,且有智能提示
img.png

1.9.6

2 months ago

1.9.5

2 months ago

1.9.4

2 months ago

1.9.3

2 months ago

1.9.1

3 months ago

1.9.0

4 months ago

1.7.6

6 months ago

1.7.5

6 months ago

1.7.4

6 months ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago