apiblue功能很强大,里面支持很多插件,这些插件能够为restfulAPI提供接口文档自动生成,甚至Mockserver的功能,当然,好多插件还是有很多坑的。下面用apiblue实现下面的业务需求:

1、用户上传.md文件,自动启动mock动作,生成一套api测试服务

2、根据.md文档自动生成html接口文档

3、当.md文档发生crud操作的时候,文档和mockServer自动更新

drakov将.md文档中的接口自动生成Mockserver,关键代码如下:

 var drakov = require('drakov');
var aglio = require('./aglio');
var path = require('path');
var sourceFiles = path.resolve(__dirname, '../mfiles/**.md');
var fs = require("fs");
var argv = {
sourceFiles: sourceFiles,//md文档存储地
serverPort: 4007,
disableCORS: false,//false允许跨域访问
debugMode: true,
discover: true,
public: true,//true允许外围ip访问api,false只能本地访问
watch: true,
method: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS']
};
module.exports = function (mdFileUrl) {
try {
if ((mdFileUrl && typeof (mdFileUrl) === "string" && mdFileUrl.indexOf(".md") > -1) || mdFileUrl == '') {
drakov.stop(function () {
// stopped Drakov
console.log('drakov Finished');
}); drakov.run(argv, function () {
console.log('drakov start');
});
if (mdFileUrl) {
aglio(mdFileUrl);
}
} } catch (e) { } finally { }
}

https://github.com/Aconex/drakov 这是drakov  git地址,上面介绍了使用中间件的方式实现drakov与express结合,当时有问题,drakov的watch功能失效,md文档发生改变,无法更新apiServer。

aglio实现将md文档生成HTML接口文档,关键代码如下:
 var aglio = require('aglio');
var path = require('path');
var fs = require('fs');
var aglio_options = {
themeTemplate: 'default',//aglio样式
locals: {
myVariable: 125
}
};
module.exports = function(mdFileUrl) {
if (mdFileUrl) {
var targetUrl = mdFileUrl.replace("/mfiles/", "/mock-ui/").replace(".md", ".html");
aglio.renderFile(mdFileUrl, targetUrl, aglio_options, function(err, warnings) {
if (err)
return console.log(err);
}
);
} }

watch监控存放md文件的文件夹,实时通知drakov和aligo,关键代码如下:

 var watch = require('watch');
var drakov = require('./drakov'); module.exports = function (watchDir) {
try {
var filepath;
watch.watchTree(watchDir, function (f, curr, prev) {
if (typeof f == "object" && prev === null && curr === null) {
// Finished walking the tree
drakov('')
} else if (prev === null) {
// f is a new file
if (filepath != f) {
drakov(f, 'new');
filepath = f;
}
} else if (curr.nlink === 0) {
if (filepath != f) {
// f was removed
drakov(f)
}
} else {
// f was changed
drakov(f)
}
})
console.log("watching file..."); } catch (e) {
console.log(e.message);
} finally { } }

ok 根据这三个js,你就可以建一个MockServer,就像 easymock(www.easy-mock.com)一样,试试吧。。对于需求工程师很有帮助

欢迎关注我的订阅号

最新文章

  1. 第三周作业(三):wc程序
  2. gulp watch出现Error: watch null EPERM的问题解释
  3. ceph官网的ceph块设备(二)——快照相关
  4. Linux nmap
  5. XAML-1
  6. poj2762 强连通+拓扑序
  7. Windows 8.1及Windows8 JDK环境变量配置
  8. 查看linux/AIX系统内存及CPU占用百分比
  9. php禁用一些重要功能
  10. Ubuntu16.04下搭建LAMP环境
  11. 无限大地图:lightmap拆分
  12. 【EMV L2】Processing Restrictions
  13. centos7 根分区扩容
  14. P4027 [NOI2007]货币兑换(斜率优化dp+cdq分治)
  15. CodeForces892E 可撤销并查集/最小生成树
  16. linux4.10.8 内核移植(一)---环境搭建及适配单板。
  17. Docker容器使用jenkins部署web项目--总结(二)
  18. 查看已装TensorFlow的版本和路径
  19. MQTT的学习研究(五) MQTT moquette 的 Blocking API 发布消息服务端使用
  20. VIM配置示例

热门文章

  1. Solidity合约:玉米生产溯源
  2. 如何悄悄地提升MySQL用户权限
  3. spring boot和mybatis入门
  4. Java实现FTP批量大文件上传下载篇1
  5. 21-z-index
  6. 传输层TCP
  7. idea操作快捷键
  8. android-基础编程-Preference
  9. Codeforces812B Sagheer, the Hausmeister 2017-06-02 20:47 85人阅读 评论(0) 收藏
  10. [ 9.11 ]CF每日一题系列—— 441C暴力模拟