★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工具,这类工具主要通过接口定义,自动生成模拟数据,前端不再依赖于后端开发进度可以独立开发,并且可以生成复杂边界数据,实现自动化测试,多人在线编辑提高协作效率。同类工具还有YApiEasyMock,EasyMock是同事极力推荐的,可以结合swagger模拟生成数据,这点确实很方便,还有其他一些比较适用的功能,以后有机会可以试用一下。这类工具确实很方便,但是不太满足现阶段公司的文档需求,以后可以根据业务发展选用该类工具。

4、Confluence被认为是最好用的企业级Wiki和知识管理工具,大型企业用的比较多,功能很强大。在他们官网上体验了一把,由于国外速度比较慢,很多功能没有试用,不做评价。查了下相关资料,配置麻烦,而且还是收费的……虽说可以破解,但是也懒得折腾了。

5、DokuWiki是什么上面都已经介绍过了,为什么最终会选用它呢?首先是不需要数据库这点吸引我在服务器上部署一套试用,因为公司的服务器资源有限,上面跑的还有正式应用……不敢瞎折腾,所以要尽量少的影响正式环境。刚开始使用,第一感觉就是丑、功能少、配置麻烦,但是想想好不容易(装了个PHP环境~)部署到服务器上不能轻易放弃啊,就在网上搜各种教程。发现了复旦大学物理教学实验中心的网站,该网站就是使用DokuWiki搭建的,虽然页面复古了些,但是作为一个实验室内信息共享的平台已经很完善了,里面也有一些DokuWiki的入门文章,从而认识到Wiki这种分享信息的形式发展潜力,wiki是任何人都可以编辑的网页,然后以超链接的形式将信息联系起来,构建一个有灵魂的知识网络系统,坚定了自己使用DokuWiki的信心。从这之后就开始了DokuWiki的折腾之旅,中间也是遇到了各种问题,入门和使用起来也不是很方便,但是通过各种插件也可以满足大多数功能,下一篇就谈一下自己是怎样使用的。

DokuWiki的发现之旅的更多相关文章

  1. 数据绑定表达式(上):.NET发现之旅(一)

    数据绑定表达式(上):.NET发现之旅(一) 2009-06-30 10:29:06 来源:网络转载 作者:佚名 共有评论(0)条 浏览次数:859 作为.NET平台软件开发者,我们频繁与各种各样的数 ...

  2. 微信小程序 发现之旅(一)—— 项目搭建与页面跳转

    开发微信小程序需要注册一个小程序账号,具体流程可以参照官方教程: https://mp.weixin.qq.com/debug/wxadoc/dev/index.html 开通账户之后,在 “开发设置 ...

  3. 微信小程序 发现之旅(三)—— 组件之间的参数传递

    一.URL 传参 当使用 navigateTo() 方法跳转页面的时候,可以在 url 后面接 query 参数 然后在 Page 页面的生命周期函数 onLoad 中可以接收到这些参数 这种方式只能 ...

  4. 微信小程序 发现之旅(二)—— 自定义组件

    组件化的项目开发中,组件应当划分为三个层次:组件.模块.页面 微信小程序已经为开发者封装好了基础组件,页面文件(pages)也有了详细的规定 而模块就需要自行开发,并且要和页面文件区分开,这就涉及到自 ...

  5. (60)zabbix网络发现介绍Network Discovery

    网络发现简介 网络发现有什么用?网络发现怎么配置? 我们带着这两个问题开始我们的网络发现之旅. 比如小明有100台服务器,不想一台台主机去添加,能不能让zabbix自动添加主机呢,当然可以,网络发现便 ...

  6. 发现意外之美 - SwiftyJSON 源码学习 | 咖啡时间

    SwiftyJSON 是一个很优秀 Swift 语言第三方库.我们在之前的文章中对它有过介绍.相信大家对它也有了一些了解.提升开发功力最好的方式就是学习优秀的源代码了,记得大神 TJ Holowayc ...

  7. Android 关于ijkplayer

    基于ijkplayer封装支持简单界面UI定制的视频播放器 可以解析ts格式的so库 怎样编译出可以解析ts等格式的so库?就是编译的时候需要在哪一步修改配置? 一些电视台的m3u8 CCTV1综合, ...

  8. Winform GDI+ 相关资料

    在Visual Studio 2010中定义GDI+自定义控件——自定义控件介绍 http://www.cnblogs.com/zhangdong/archive/2010/05/20/1740177 ...

  9. 关于“float”的一次探索--遇到了一个span元素可以设置宽高引发的思考

    起初,这个问题和float还有设置宽高之间是没有任何关联的,一开始这是一个关于height和line-height的问题,目的是为了探究一下这两者之间的关系,但是在学习的过程中,我翻之前写的代码,发现 ...

随机推荐

  1. .NET开发设计模式-获取某个接口下面所有的派生类

    using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...

  2. Spring MVC 文件上传 & 文件下载

    索引: 开源Spring解决方案--lm.solution 参看代码 GitHub: pom.xml WebConfig.java index.jsp upload.jsp FileUploadCon ...

  3. python 序列化及其相关模块(json,pickle,shelve,xml)详解

    什么是序列化对象? 我们把对象(变量)从内存中编程可存储或传输的过程称之为序列化,在python中称为pickle,其他语言称之为serialization ,marshalling ,flatter ...

  4. Docker容器发布spring boot项目

    一.安装Docker环境 yum install docker 安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动: systemctl start docker.servic ...

  5. linux 获取网络状态信息(Rtnetlink)

    一.Rtnetlink Rtnetlink 允许对内核路由表进行读和更改,它用于内核与各个子系统之间(路由子系统.IP地址.链接参数等)的通信, 用户空间可以通过NET_LINK_ROUTER soc ...

  6. spring Cloud 域名映射 ip地址实现

    spring.cloud.inetutils.preferredNetworks[0]=^192\.168 eureka.instance.prefer-ip-address=true

  7. SSM-MyBatis-17:Mybatis中一级缓存(主要是一级缓存存在性的证明,增删改对一级缓存会造成什么影响)

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 缓存------------------------------------------> 很熟悉的一个 ...

  8. [ Java面试题 ]多线程篇

    1.什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一 ...

  9. 第四章——训练模型(Training Models)

    前几章在不知道原理的情况下,已经学会使用了多个机器学习模型机器算法.Scikit-Learn很方便,以至于隐藏了太多的实现细节. 知其然知其所以然是必要的,这有利于快速选择合适的模型.正确的训练算法. ...

  10. Java 学习笔记 (七) Java 参数

    head first java page 74 实参: argument 形参: parameter 方法会运用形参, 调用的一方会传入实参. 实参是传给方法的值.当它传入方法后就成了形参, 参数跟局 ...