首页 > 其他分享 >从rap2数据导入yapi中

从rap2数据导入yapi中

时间:2022-10-10 13:23:37浏览次数:62  
标签:paths description yapi rap2 modules json 导入 var method

复制教程: 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内容的地址,点击转换按钮即可

标签:paths,description,yapi,rap2,modules,json,导入,var,method
From: https://www.cnblogs.com/init-007/p/16775345.html

相关文章

  • 传输数据库/导入导出数据库
    您可以使用完整的可传输 export/import功能将整个数据库从一个Oracle数据库实例复制到另一个实例。为Oracle数据库迁移数据的导出/导入优势使用导出/导入升级Orac......
  • IIS服务器如何导入中间证书或根证书?
    许多客户在IIS服务器上绑定SSL证书时提示“证书链的一个或多个中间证书丢失。要解决此问题,请确保安装了所有的中间证书。”,绑定后访问https页面也会提示该证书不是由信任机......
  • IIS服务器如何导入中间证书或根证书?
    许多客户在IIS服务器上绑定SSL证书时提示“证书链的一个或多个中间证书丢失。要解决此问题,请确保安装了所有的中间证书。”,绑定后访问https页面也会提示该证书不是由信任机......
  • wireshark网络封包抓包工具导入/导出pcap文件
    1、Wireshark导入文件打开Wiresharkwiki,点击SampleCaptures,可以看到Wireshark官方上传的一些pcap文件。点击SampleCaptures后,可以看到文件后缀名有cap,pcap,pcapng,pc......
  • 数据导入失败处理方法
    用记事本的方式编辑打开sql先ctrl+H查找COLLATEutf8mb4_0900_ai_ci替换为  utf8_general_ci在替换 utf8mb4为 utf8 将sql文件保存即可 技术贡献者:......
  • hive导入mysql
    hive测试——HIVE数据分析02题目:4、处理结果入库:(在虚拟机安装mysql)  将上述统计分析的结果数据保存到mySQL数据库中。 #text3_1入库#1.添加驱动,在hive的lib......
  • 使用POI 实现 Excel 导入导出
    使用POI实现Excel导入导出importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io......
  • docker搭建yapi接口文档系统、Idea中上传接口、在线调用
    一、前言在我们后端开发中,必不可少的是接口的交接,有很多种方式,常见的就是swagger,不过这个侵入性太强了。还有就是接口文档的框架,比如今天小编带大家一起搭建的yapi,在公司......
  • sqoop导入数据到mysql代码:
    bin/sqoopexport--connectjdbc:mysql://hadoop102:3306/company--usernameroot--password000000--tableticket01--num-mappers1--export-dir/user/hive/wareh......
  • .NetCore WebAPI 导入、导出Excel文件
    .NetCoreWebAPI导入、导出Excel文件导入思路:上传Excel文件,使用MemoryStream在内存中加载,使用NPOI读取内容到Model类中。///<summary>///导入Excel文件///</su......