Rap2导出swagger2格式json,方便转入yapi
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
之前一直用Rap2管理接口,但是总感觉功能比较单一,体验也一般。最近发现yapi挺好用的,顺手就装好了。但是无奈没有对应的迁移工具,只好亲自写了一个。
原理
采用曲线救国的方式,rap2 =》 swagger.json => 导入yapi。
使用方式
输入rap2某个项目的json地址,点击装换,即可自动下载对应的swagger.json,然后再yapi中新建一个项目,导入swagger.json即可。
代码
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script>function changeRap() {
var origin = document.getElementById('origin').value;
if (!origin) return alert('原始json不能为空');
if (origin.indexOf('http') === 0) {
$.ajax({
type: 'get',
url: origin,
dataType: 'jsonp',
success: r = >{
var m = {};
m.swagger = '2.0';
m.info = {};
m.info.title = r.data.name;
m.info.description = r.data.description;
m.tags = r.data.modules.map(({
name,
description
}) = >({
name,
description
}));
m.paths = parsePaths(r.data.modules);
m.definitions = parseDefinitions(r.data.modules);
//下载为json文件
var Link = document.createElement('a');
Link.download = "api.json";
Link.style.display = 'none';
// 字符内容转变成blob地址
var blob = new Blob([JSON.stringify(m)]);
Link.href = URL.createObjectURL(blob);
// 触发点击
document.body.appendChild(Link);
Link.click();
// 然后移除
document.body.removeChild(Link);
}
})
}
}
function parsePaths(modules) {
var paths = {};
for (var i = 0,
len = modules.length; i < len; i++) {
for (var j = 0,
jlen = modules[i].interfaces.length; j < jlen; j++) {
var m = modules[i].interfaces[j];
paths[m.url] = {};
var method = m.method.toLowerCase();
paths[m.url][method] = {};
paths[m.url][method].tags = [modules[i].name];
paths[m.url][method].summary = m.name;
if (method === 'post') paths[m.url][method].consumes = ["multipart/form-data"];
paths[m.url][method].description = m.description;
paths[m.url][method].parameters = parseParameters(m.properties, method);
paths[m.url][method].deprecated = false;
paths[m.url][method].responses = {
"200": {
"description": "ok",
"schema": {
"$ref": "#/definitions/Response" + m.id
}
}
};
}
}
return paths;
}
function parseParameters(props, method) {
var list = [];
for (var i = 0,
len = props.length; i < len; i++) {
var p = props[i];
if (p.scope === 'response') continue;
list.push({
name: p.name,
"in": method === 'get' ? 'query': 'formData',
example: 'default',
description: p.description || '',
type: p.type.toLowerCase(),
required: p.required
});
}
return list;
}
function parseDefinitions(modules) {
var ds = {};
for (var i = 0,
len = modules.length; i < len; i++) {
for (var j = 0,
jlen = modules[i].interfaces.length; j < jlen; j++) {
var m = modules[i].interfaces[j];
for (var n = 0,
nlen = m.properties.length; n < nlen; n++) {
var p = m.properties[n];
if (p.scope === 'request') continue;
var suf = p.parentId === -1 ? m.id: p.parentId;
if (!ds['Response' + suf]) ds['Response' + suf] = {
title: 'Response' + suf,
type: "object",
properties: {}
};
if (p.type === 'Object') ds['Response' + suf].properties[p.name] = {
"$ref": "#/definitions/Response" + p.id
};
else if (p.type === 'Array') ds['Response' + suf].properties[p.name] = {
type: "array",
items: {
"$ref": "#/definitions/Response" + p.id
}
};
else ds['Response' + suf].properties[p.name] = {
type: p.type.toLowerCase(),
description: p.description || '',
default:
p.value || undefined
}
}
}
}
return ds;
}</script>
</head>
<body>
<input id="origin" />
<button onclick="changeRap()">转换</button></body>
</html>
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
4 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献1条内容
所有评论(0)