0.2.0 • Published 5 years ago
@medlinker/apitool v0.2.0
@medlinker/apitool
医联前端 api 工具
安装
npm i @medlinker/apitool
功能特性
- 基于
axios二次封装的request模块 - 通过 swagger 接口文档自动生成接口代码工具-
createAPI。建议和上述封装的request模块结合使用。 - 支持 typescript
request
基于axios封装,但是为了兼容 typescript 的声明,将 API 做了较大的改动。
import request from '@medlinker/apitool/request'
async function fetch() {
const res = await request.get('/user/list').setParams({ start: 0, limit: 20 })
console.log(res)
}请求方法
request.method(url, config)
method 支持get,post,put,delete。
url- 请求地址config- 继承于 axios 配置,可以传入其他的配置,在回调时可能有用
同时每一个请求网络的方法都支持传入声明,只是不同请求类型的声明参数有所区别。
P 是 URL 请求参数,D 是请求正文,R 是返回值
request.get<P={},R={}>(url, config)request.post<D={},R={}>(url, config)request.put<D={},R={}>(url, config)request.delete<P={},R={}>(url, config)
Request实例
上述的每一个方法都会返回一个 Request 对象实例,每一个实例有以下属性。
.appendParams(params):this
给请求追加参数
.setParams(params):this
给请求设置请求参数,会整体覆盖之前的参数
.appendData(params):this
给请求追加正文数据
.setParams(params):this
给请求设置正文数据,会整体覆盖之前的正文
.setConfig(config):this
给请求设置配置参数。
.setHeaders(headers):this
给请求设置请求头配置。
then
同promise then 方法,会触发发送请求,如果上一次请求没完成则会中断上一次请求。支持await
catch
同promise catch 方法,会触发发送请求,如果上一次请求没完成则会中断上一次请求。支持await
.cancel()
如果有正在进行中的请求,则中断当前请求,并抛出一个CancelError的异常。
.create(config)
创建一个新的 request 实例,并会将传入的 config 作为默认配置。
config- 继承于 axios 配置,并支持以下额外回调config.onSuccess- 请求成功后触发config.onError- 请求失败后触发config.beforeSend- 请求发送前触发,通常在此添加公共参数,请求头等
export type RequestInstanceConfig = RequestBaseConfig & {
onSuccess?: (data: AxiosResponse, config: RequestInstanceConfig) => Promise<any> | any
onError?: (error: AxiosError, config: RequestInstanceConfig) => Promise<any> | any
beforeSend?: (config: RequestBaseConfig) => RequestBaseConfig | Promise<RequestBaseConfig>
}.isCancelError(err)
传入 err 是否是一个中断错误
createAPI
根据 swagger 接口配置生成 api 代码,支持命令和命令行调用
import createAPI from '@medlinker/apitool/createAPI'createAPI.genCode(swaggerInfo, config)
swaggerInfo- swagger 接口配置config- 配置config.dist- 代码输出文件config.generator- createAPI 默认只会生成数据声明代码,需要通过钩子来生成方法和头部。参考下文config.requestModule- request 模块引用,默认使用@medlinker/apitool/request。如果你有自定义 request,可以配置'./request.ts'这样的相对路径
createAPI.genCode(swaggerConfig, {
dist: path.resolve('./src/api/api.ts'),
generator: createAPI.generators.get('nextjs'),
requestModule: './request',
})generators
通过createAPI.generators.get(name:string)来获取 generator.
目前支持以下类型
nextjsnextjs 服务端渲染default(默认)
cli
模块安装后支持createAPI命令来生成代码,如:
{
"scripts": {
"api": "DEBUG=CreateAPI createAPI -u=http://patient-medication-dev.medlinker.com/swagger/doc.json -g=nextjs -r='./request' -d=./client/apis/api.ts"
}
}通过 createAPI -h 来获取完整的命令信息。
如果你想查看调试信息,请在命令前添加DEBUG=CreateAPI是内置的 debug 模块生效。