moyan-api
描述
用于生成OAS3 的调用api
安装
npm i moyan-api -S
pageage配置
#pageage.json
{
"moyan-api":{
"output":"src", // 生成的文件输出目录,默认值:src
"apijson":"moyan.api.json" ,// 生成sdk 的openApi 3.0 数据 ,默认值:moyan.api.json
"jsonurl":"远程获取数据的地址",
"apiprefix":"Api",
}
}
使用
- 调用命令前,必须保证你的项目根目录里面存在moyan.api.json(openApi 3.0格式的数据)或者在ageage.json中配置
{
"moyan-api":{
"jsonurl":"远程获取数据的地址"
}
}
cd 你的项目根目录
moyan-api
调用命令后会在我们的src/api 生成index.ts、schemas.ts两个文件,其中index.ts中的class就是我们的api调用类了。
调用
- 在我们开始调用api之前,我们需要对我们的 ApiCall 类做一些配置处理。
- 我们可以在我们的src/lib/api下创建一个config.ts (具体文件名、路径可根据自己的喜好创建修改)。
import { ElMessage } from 'element-plus'
import { getConfig } from '../../config'
import axios, { AxiosInstance, AxiosRequestConfig } from 'axios'
import { ApiCall, ApiEntity } from 'moyan-api'
const AXIOS = Symbol('mo#Api#axios')
export class MoAxios {
static [AXIOS]: AxiosInstance
options: any = {}
constructor(options: any = {}) {
this.options = options
}
get $axios() {
if (!MoAxios[AXIOS]) {
MoAxios[AXIOS] = axios.create(this.config.axios)
this.init()
}
return MoAxios[AXIOS]
}
get config() {
return getConfig()
}
init() {
this.$axios.interceptors.response.use(
(res) => {
if (typeof this.options.render === 'function') {
return this.options.render(res)
} else {
return res
}
},
async (error) => {
// Do something with response error
if (error && error.response) {
switch (error.response.status) {
case 502:
error.message = '网关错误'
break
case 504:
error.message = '网关超时'
break
case 505:
error.message = '版本不受支持'
break
default:
error.message = error.response.data.message
break
}
}
throw error
}
)
}
request(apiEntity: ApiEntity) {
const url = `${apiEntity.path}`
const requsetOption: AxiosRequestConfig = {
responseType: 'json',
baseURL: this.config.moApi.baseURL,
url,
method: apiEntity.method,
headers: {}
}
if (apiEntity.method === 'GET') {
requsetOption.params = { params: apiEntity.params }
} else {
requsetOption.data = apiEntity.params
}
return this.$axios(requsetOption)
}
}
ApiCall.hintSuccessHandler = (apiCall) => {
console.info('请求成功!!')
ApiCall.hasPrompted = true
ElMessage.success({
message: apiCall.successMsg,
onClose: () => {
ApiCall.hasPrompted = false
}
})
}
ApiCall.hintFailHandler = (apiCall) => {
console.info('请求错误!!')
ApiCall.hasPrompted = true
apiCall.failMsg &&
ElMessage.error({
message: apiCall.failMsg,
onClose: () => {
ApiCall.hasPrompted = false
}
})
}
ApiCall.use(new MoAxios())
- 现在我们就可以在我们的项目中调用api了
new ApiGetUser({params:{id:1}}).then((res)=>{
...
})