前言
为了提高前端开发效率,所以使用node来写了个这个工具,基于Swagger.json生成axios代码,省去axios部分的工作。
1、先安装axios
npm i axios
2、创建 axiosCode.js 文件并写入代码
const axios = require('axios')
const fs = require('fs')
async function generateAxiosCode(swaggerUrl) {
try {
// 发送HTTP请求以获取Swagger规范的JSON定义
const response = await axios.get(swaggerUrl)
const swaggerSpec = response.data
// 提取API接口信息
const paths = swaggerSpec.paths
let axiosCode = 'import http from "@/api"\n'
for (const [path, pathInfo] of Object.entries(paths)) {
for (const [method, methodInfo] of Object.entries(pathInfo)) {
// 提取必要的信息
const summary = methodInfo.summary || ''
const parameters = methodInfo.parameters || []
const operationId = methodInfo.operationId || ''
// 请求参数注释 integer要特殊处理一下
const requestParams = parameters
.map(
param =>
`@param {${param.type === 'integer' ? 'number' : param.type}} ${
param.name
} --参数说明:${param.description} 是否必须: ${
param.required
}\n`
)
.join(' ')
// 生成请求参数注释代码片段
axiosCode += `\n/**
${summary}
${requestParams}*/`
// query特殊处理下
const isQuery = parameters
.filter(param => param.in === 'query' || param.in === 'path')
.map(param => param.name)
.join('')
axiosCode += `\nexport const ${operationId} = params => http.${method.toLowerCase()}('${path}'${
isQuery ? ', {params}' : ', params'
})\n`
}
}
// 将生成的Axios代码写入文件
fs.writeFile('./as-api.js', axiosCode, error => {
if (error) {
console.error('无法写入生成的Axios代码到文件中。', error)
} else {
console.log('Axios代码已成功生成并保存到./as-api.js文件中。')
}
})
} catch (error) {
console.error('无法获取Swagger规范的JSON定义。', error)
}
}
// 示例使用
const swaggerUrl =
'https://qiniu-plat.juroom.cn/apk/docs.json'
generateAxiosCode(swaggerUrl)
3、运行工具
node ./axiosCode.js
tps: 本文章是提供一个demo,更多的需求可自行扩展