apiblue功能很强大,里面支持很多插件,这些插件能够为restfulAPI提供接口文档自动生成,甚至Mockserver的功能,当然,好多插件还是有很多坑的。下面用apiblue实现下面的业务需求:
1、用户上传.md文件,自动启动mock动作,生成一套api测试服务
2、根据.md文档自动生成html接口文档
3、当.md文档发生crud操作的时候,文档和mockServer自动更新
drakov将.md文档中的接口自动生成Mockserver,关键代码如下:
1 var drakov = require('drakov'); 2 var aglio = require('./aglio'); 3 var path = require('path'); 4 var sourceFiles = path.resolve(__dirname, '../mfiles/**.md'); 5 var fs = require("fs"); 6 var argv = { 7 sourceFiles: sourceFiles,//md文档存储地 8 serverPort: 4007, 9 disableCORS: false,//false允许跨域访问 10 debugMode: true, 11 discover: true, 12 public: true,//true允许外围ip访问api,false只能本地访问 13 watch: true, 14 method: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS'] 15 }; 16 module.exports = function (mdFileUrl) { 17 try { 18 if ((mdFileUrl && typeof (mdFileUrl) === "string" && mdFileUrl.indexOf(".md") > -1) || mdFileUrl == '') { 19 drakov.stop(function () { 20 // stopped Drakov 21 console.log('drakov Finished'); 22 }); 23 24 drakov.run(argv, function () { 25 console.log('drakov start'); 26 }); 27 if (mdFileUrl) { 28 aglio(mdFileUrl); 29 } 30 } 31 32 } catch (e) { } finally { } 33 }
https://github.com/Aconex/drakov 这是drakov git地址,上面介绍了使用中间件的方式实现drakov与express结合,当时有问题,drakov的watch功能失效,md文档发生改变,无法更新apiServer。
aglio实现将md文档生成HTML接口文档,关键代码如下:
1 var aglio = require('aglio'); 2 var path = require('path'); 3 var fs = require('fs'); 4 var aglio_options = { 5 themeTemplate: 'default',//aglio样式 6 locals: { 7 myVariable: 125 8 } 9 }; 10 module.exports = function(mdFileUrl) { 11 if (mdFileUrl) { 12 var targetUrl = mdFileUrl.replace("/mfiles/", "/mock-ui/").replace(".md", ".html"); 13 aglio.renderFile(mdFileUrl, targetUrl, aglio_options, function(err, warnings) { 14 if (err) 15 return console.log(err); 16 } 17 ); 18 } 19 20 }
watch监控存放md文件的文件夹,实时通知drakov和aligo,关键代码如下:
1 var watch = require('watch'); 2 var drakov = require('./drakov'); 3 4 module.exports = function (watchDir) { 5 try { 6 var filepath; 7 watch.watchTree(watchDir, function (f, curr, prev) { 8 if (typeof f == "object" && prev === null && curr === null) { 9 // Finished walking the tree 10 drakov('') 11 } else if (prev === null) { 12 // f is a new file 13 if (filepath != f) { 14 drakov(f, 'new'); 15 filepath = f; 16 } 17 } else if (curr.nlink === 0) { 18 if (filepath != f) { 19 // f was removed 20 drakov(f) 21 } 22 } else { 23 // f was changed 24 drakov(f) 25 } 26 }) 27 console.log("watching file..."); 28 29 } catch (e) { 30 console.log(e.message); 31 } finally { } 32 33 }
ok 根据这三个js,你就可以建一个MockServer,就像 easymock(www.easy-mock.com)一样,试试吧。。对于需求工程师很有帮助
欢迎关注我的订阅号