DokuWiki的发现之旅
★DokuWiki介绍
Wiki是什么?是一种允许一群用户用简单的描述来创建和连接一组网页的社会计算系统,可以让人们在web的基础上对Wiki文本进行浏览、创建和更改,是一种人类的知识的网络系统,有助于在一个社群内共享某个领域的知识。
DokuWiki是什么?是一个符合标准、简单易用的Wiki,主要用于创建任何类型的文件。它适用于开发团体、工作小组和小型企业。它有简单而强大的语法,确保数据文件在Wiki外仍然可以阅读,并简化了结构化文本的创建。所有数据都保存在纯文本文件中--不需要数据库。
★DokuWiki相遇
事情是这个样子的:之前公司的主要产品是一款APP,首先我们需要定义接口文档,方便前后端同时开发。刚开始使用传统的方式--万能的Word+SVN,SVN主要用于文档的版本控制和协作。刚开始接口少,更新完文档之后,吼一嗓子,同事就会同步最新的文档,貌似还很顺利。随着接口越来越多,修改越来越频繁,这种靠吼的同步方式,就显得效率低下。同时也暴露了一些弊端,虽然有版本控制,会存储历史记录,但是SVN对这种非简单格式的文本不能记录文档的具体变化,也就不能对比历史记录修改了什么,当对接口历史追溯的时候,就显得捉襟见肘,这就造成沟通和维护成本比较高。这时就亟待一个接口文档的管理系统解决以上问题。
首先第一个要求必须是Web应用,这样客户端只需要浏览器,可以方便在线修改后及时同步更新。其次是可以部署到本地的,最好是开源,我们的接口文档属于内部人员查看,不能暴露给第三方,虽然某些系统可以提供在线服务,但是安全性得不到保证。还有比较重要的一点就是,上手容易,门槛较低,最好有统一的接口模板,不用每次重新写,开发人员写代码已属不易,何必跟自己过不去呢。于是在网上一番搜索,总结了现在市面上比较流行的接口管理或者文档管理系统,由于时间和水平有限,覆盖面可能只有一小部分,只针对某类比较典型的框架或系统进行分析,仅代表个人观点。
1、Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。Swagger文档的编写可以采用两种方式,一是手动编写Swagger文档,大概看了一下swagger的语法,还挺复杂的,暂且不讨论。二是可以从代码注释中自动生成,这也是目前公司所采用的,这种方式语法简洁,使用方便,一键生成固定的文档格式,还可以在线调试接口,确实是开发利器。但是这种方式做为一种文档管理系统还是有一些局限性。例如不能查看接口的文档修改历史,只能通过代码中的注释和版本管理工具进行对比,还有就是没有搜索的功能,所以我们现在是使用swagger作为辅助文档和在线调试的工具。
2、ShowDoc一个适合IT团队的在线文档分享工具,使用Markdown编辑实时预览,也可以编辑模板一键插入,有历史版本可以追溯,使用简单,功能专注,还有word文档导出功能,确实作为一个接口文档管理系统功能已经够用了,个人来说比较喜欢。但是考虑到公司以后的发展,需要在线存储文件,更精细化的权限控制等功能,这些ShowDoc暂时无法实现,只能忍痛割爱了。同类型的产品还有MinDoc、小幺鸡等,做的都还可以,可以试用对比一下。
3、RAP是一个阿里巴巴旗下的阿里妈妈前端团队出品的mock工具,这类工具主要通过接口定义,自动生成模拟数据,前端不再依赖于后端开发进度可以独立开发,并且可以生成复杂边界数据,实现自动化测试,多人在线编辑提高协作效率。同类工具还有YApi和EasyMock,EasyMock是同事极力推荐的,可以结合swagger模拟生成数据,这点确实很方便,还有其他一些比较适用的功能,以后有机会可以试用一下。这类工具确实很方便,但是不太满足现阶段公司的文档需求,以后可以根据业务发展选用该类工具。
4、Confluence被认为是最好用的企业级Wiki和知识管理工具,大型企业用的比较多,功能很强大。在他们官网上体验了一把,由于国外速度比较慢,很多功能没有试用,不做评价。查了下相关资料,配置麻烦,而且还是收费的……虽说可以破解,但是也懒得折腾了。
5、DokuWiki是什么上面都已经介绍过了,为什么最终会选用它呢?首先是不需要数据库这点吸引我在服务器上部署一套试用,因为公司的服务器资源有限,上面跑的还有正式应用……不敢瞎折腾,所以要尽量少的影响正式环境。刚开始使用,第一感觉就是丑、功能少、配置麻烦,但是想想好不容易(装了个PHP环境~)部署到服务器上不能轻易放弃啊,就在网上搜各种教程。发现了复旦大学物理教学实验中心的网站,该网站就是使用DokuWiki搭建的,虽然页面复古了些,但是作为一个实验室内信息共享的平台已经很完善了,里面也有一些DokuWiki的入门文章,从而认识到Wiki这种分享信息的形式发展潜力,wiki是任何人都可以编辑的网页,然后以超链接的形式将信息联系起来,构建一个有灵魂的知识网络系统,坚定了自己使用DokuWiki的信心。从这之后就开始了DokuWiki的折腾之旅,中间也是遇到了各种问题,入门和使用起来也不是很方便,但是通过各种插件也可以满足大多数功能,下一篇就谈一下自己是怎样使用的。
DokuWiki的发现之旅的更多相关文章
- 数据绑定表达式(上):.NET发现之旅(一)
数据绑定表达式(上):.NET发现之旅(一) 2009-06-30 10:29:06 来源:网络转载 作者:佚名 共有评论(0)条 浏览次数:859 作为.NET平台软件开发者,我们频繁与各种各样的数 ...
- 微信小程序 发现之旅(一)—— 项目搭建与页面跳转
开发微信小程序需要注册一个小程序账号,具体流程可以参照官方教程: https://mp.weixin.qq.com/debug/wxadoc/dev/index.html 开通账户之后,在 “开发设置 ...
- 微信小程序 发现之旅(三)—— 组件之间的参数传递
一.URL 传参 当使用 navigateTo() 方法跳转页面的时候,可以在 url 后面接 query 参数 然后在 Page 页面的生命周期函数 onLoad 中可以接收到这些参数 这种方式只能 ...
- 微信小程序 发现之旅(二)—— 自定义组件
组件化的项目开发中,组件应当划分为三个层次:组件.模块.页面 微信小程序已经为开发者封装好了基础组件,页面文件(pages)也有了详细的规定 而模块就需要自行开发,并且要和页面文件区分开,这就涉及到自 ...
- (60)zabbix网络发现介绍Network Discovery
网络发现简介 网络发现有什么用?网络发现怎么配置? 我们带着这两个问题开始我们的网络发现之旅. 比如小明有100台服务器,不想一台台主机去添加,能不能让zabbix自动添加主机呢,当然可以,网络发现便 ...
- 发现意外之美 - SwiftyJSON 源码学习 | 咖啡时间
SwiftyJSON 是一个很优秀 Swift 语言第三方库.我们在之前的文章中对它有过介绍.相信大家对它也有了一些了解.提升开发功力最好的方式就是学习优秀的源代码了,记得大神 TJ Holowayc ...
- Android 关于ijkplayer
基于ijkplayer封装支持简单界面UI定制的视频播放器 可以解析ts格式的so库 怎样编译出可以解析ts等格式的so库?就是编译的时候需要在哪一步修改配置? 一些电视台的m3u8 CCTV1综合, ...
- Winform GDI+ 相关资料
在Visual Studio 2010中定义GDI+自定义控件——自定义控件介绍 http://www.cnblogs.com/zhangdong/archive/2010/05/20/1740177 ...
- 关于“float”的一次探索--遇到了一个span元素可以设置宽高引发的思考
起初,这个问题和float还有设置宽高之间是没有任何关联的,一开始这是一个关于height和line-height的问题,目的是为了探究一下这两者之间的关系,但是在学习的过程中,我翻之前写的代码,发现 ...
随机推荐
- java正则表达式验证金额
String reg_money = "\\d+(\\.\\d{1,2})?";// 金额正则,可以没有小数,小数最多不超过两位 Pattern pattern = Pattern ...
- Java如何获取系统信息(包括操作系统、jvm、cpu、内存、硬盘、网络、io等)
1 下载安装sigar-1.6.4.zip 使用java自带的包获取系统数据,容易找不到包,尤其是内存信息不够准确,所以选择使用sigar获取系统信息. 下载地址:http://sourceforge ...
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装
在asp.net项目中,添加一个[一般处理程序]来处理请求是很自然的事,这样会得到一个实现自IHttpHandler的类,然后只需在ProcessRequest方法中写上处理逻辑就行了.但是这样的一个 ...
- Python并发编程之从生成器使用入门协程(七)
大家好,并发编程 进入第七篇. 从今天开始,我们将开始进入Python的难点,那就是协程. 为了写明白协程的知识点,我查阅了网上的很多相关资料.发现很难有一个讲得系统,讲得全面的文章,导致我们在学习的 ...
- js算法初窥03(简单搜索及去重算法)
前面我们了解了一些常用的排序算法,那么这篇文章我们来看看搜索算法的一些简单实现,我们先来介绍一个我们在实际工作中一定用到过的搜索算法--顺序搜索. 1.顺序搜索 其实顺序搜索十分简单,我们还是以第一篇 ...
- [ Java面试题 ]算法篇
1.堆和栈在内存中的区别是什么? 概念: 栈(stack)是为执行线程留出的内存空间.当函数被调用的时候,栈顶为局部变量和一些 bookkeeping 数据预留块.当函数执行完毕,块就没有用了,可能在 ...
- redis与python交互
import redis #连接 r=redis.StrictRedis(host="localhost",port=6379,password="sunck" ...
- js中的对象创建与继承
对象创建 1.工厂模式 优点:解决了创建多个相似对象的问题 缺点:没有解决对象识别问题:每一个对象都有一套自己的函数,浪费资源 function createPerson(name, age, job ...
- Selenium 三种等待
问题 : 强制等待和隐式等待的区别怎么理解? 和pause有什么区别?什么时候适用pause? 第二篇文章更清楚一点. 以下内容引自: https://www.cnblogs.com/xu-jia-l ...
- Java7里try-with-resources分析
这个所谓的try-with-resources,是个语法糖.实际上就是自动调用资源的close()函数.和Python里的with语句差不多. 例如: [java] view plain copy ...



