zl程序教程

您现在的位置是:首页 >  后端

当前栏目

从rap2数据导入yapi中

2023-09-27 14:21:27 时间

复制教程: https://www.jianshu.com/p/4bd2ec5cb5e7

主要 Rap2导出swagger2格式json:

原理

采用曲线救国的方式,rap2 =》 swagger.json => 导入yapi。

输入rap2某个项目的json地址,下载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: 'json',
            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>

首先本地运行上面html代码,输入可以获取 rap json内容的地址,点击转换按钮即可