介绍
在项目开发中,通常前端需要和后端进行接口对接,常规操作步骤为:
1、打开后端接口文档地址
2、找到接口
3、复制接口
4、打开前端的api.js文件,赋值,并进行接口备注
在一个项目中,当有大量的接口时,就要重复多次的做这种事,大大影响开发效率。
而通过接口爬取的方式直接生成api.js文件将大大提升开发效率。
实现步骤
1、在src下的tool中新建api.js文件,主要用来实现对接口文档的接口爬取。主要利用node的request模块发起接口请求,fs模块进行写入操怍,具体实现如下:
const fs = require('fs')
const request = require('request')
const config = require('../config.js')
let str = ``
let obj = {}
for (let key in config.API_URL) {
const API_DOC_URL = `${config.API_URL[key]}/operation/v2/api-docs` // 接口文档地址
const API_DOC_URL1 = `${config.API_URL[key]}/v2/api-docs` // 接口文档地址
sendRequest(API_DOC_URL, key)
sendRequest(API_DOC_URL1, key)
}
function sendRequest(url, key) {
request(url, (error, response, body) => {
if (!error && response.statusCode == 200) {
let apiListObj = JSON.parse(`${body}`).paths // 接口地址对象(当前文档所有的接口地址都在这个对象里)
for (let i in apiListObj) {
let name = i.split('/').join('_')
if (obj[name]) {
continue
}
if (apiListObj[i].post) {
str += ` "${name}": '/${key}${i}', // ${apiListObj[i].post.summary}\n`
} else if (apiListObj[i].get) {
str += ` "${name}": '/${key}${i}', // ${apiListObj[i].get.summary}\n`
} else if (apiListObj[i].put) {
str += ` "${name}": '/${key}${i}', // ${apiListObj[i].put.summary}\n`
} else if (apiListObj[i].delete) {
str += ` "${name}": '/${key}${i}', // ${apiListObj[i].delete.summary}\n`
}
obj[name] = true
}
}
// 如果是最后一个接口,则写入
writeFile(str)
})
}
function writeFile(str) {
// 去除最后一个逗号
// var r = /,+$/;
str = str.replace(/,([^,]*?)$/g, `$1`)
fs.writeFile(
'./src/apis.js',
`import megreApi from '@companyfe/szty-frame/src/utils/megreAPI'
let mergedApi = megreApi({
${str}})
let apis = {}
let publicPath = process.env.BASE_URL || '/'
// 清除尾部的斜杠
if ('/' == publicPath[publicPath.length - 1]) {
publicPath = publicPath.slice(0, publicPath.length - 1)
}
for (let key in mergedApi) {
apis[key] = publicPath + mergedApi[key]
}
export default apis
`,
err => {
if (err) throw err
// console.log('写入完成')
}
)
}
在congfig.js中主要是定义一些配置文件,如用到的API_URL,这里考虑到多个地址的情况
module.exports = {
API_URL: {
file: 'http://aaa/file', // 文件服务接口地址
dict: 'http:/bbb/dict', // 字典表接口地址
staticfile: 'http://ccc/staticfile' // 静态文件
}
}
2、在package.json 文件中定义运行脚本命令,"api": "node src/tool/api.js"
,