使用apidocJs快速生成在线文档的实例讲解


Posted in Python onFebruary 07, 2018

apidoc是一个轻量级的在线REST接口文档生成系统,支持多种主流语言,包括Java、C、C#、PHP和Javascript等。使用者仅需要按照要求书写相关注释,就可以生成可读性好、界面美观的在线接口文档。

本文主要包含以下内容:

1.介绍apidoc的基本概念

2.安装、使用和简单配置

3.一些特殊参数的含义及其使用

4.介绍一些使用经验

前言

apidoc能做什么?

apidoc是一个轻量级的在线REST接口文档生成系统,可以根据其特定的规则的代码注释来生成静态网页。首先看下它生成的文档界面和风格。

使用apidocJs快速生成在线文档的实例讲解

支持

apidoc支持多种主流的编码语言,包括Java、C、C#、PHP和Javascript。一般情况下,语言会有多种注释方法,例如就Java中有普通风格的多行注释和Javadoc风格的注释。apidoc并不支持所有的注释,譬如Java仅中支持Javadoc风格的注释。首先要说明的是,apidoc并不具备语义识别能力,它不会发现代码中是否有BUG,它仅仅通过文件后缀来判断语言类型。下面是一些不同语言注释示例:

* Java、Javascript、PHP *

/**
 * @api {get} /user/:id Request User information
 * @apiName GetUser
 * @apiGroup User
 *
 * @apiParam {Number} id Users unique ID.
 *
 * @apiSuccess {String} firstname Firstname of the User.
 * @apiSuccess {String} lastname Lastname of the User.
 */

* Python *

"""
@api {get} /user/:id Request User information
@apiName GetUser
@apiGroup User

@apiParam {Number} id Users unique ID.

@apiSuccess {String} firstname Firstname of the User.
@apiSuccess {String} lastname Lastname of the User.
"""

安装

apidoc是基于nodeJs平台,在安装apidoc之前,需要先安装nodeJs。关于nodeJs的安装,一搜一大把,不过为了文章的完整性,还是首先介绍一下Windows平台下nodeJs的安装。

nodeJs安装

首先,去node.js官网上下载最新的安装包,请下载自己对应系统的安装包。譬如笔者的操作系统是64位Windows操作系统,就下载下图所示的node安装包。

使用apidocJs快速生成在线文档的实例讲解

下载完毕后,按照一般的软件安装步骤安装即可。由于笔者的计算机已经安装过了,在这里就不过细演示了。

按理来说,按照安装步骤安装完毕后,node环境也已经配置好了,现在来验证一下node是否已正确安装配置。

首先,打开Window Shell窗口。使用win+R快捷键打开运行窗口,在文本框中输入cmd并回车打开Windows Shell。

然后,在控制台输入node命令进入node控制台。

最后,运行一个Hello World程序。在node控制台中输入console.info("hello world");,如果输出如下图所示的结果,则表示node安装配置成功。

使用apidocJs快速生成在线文档的实例讲解

除了node之外,npm(node package manager,node安装包管理器)也是很重要的,可以通过它来便捷地下载和安装node应用。在Windows Shell中输入npm命令,如果出现如下图所示的信息,则表示npm也正确安装完毕。

使用apidocJs快速生成在线文档的实例讲解

apidoc安装

apidoc可以利用npm来快速安装。

1、进入Windows Shell,输入npm install apidoc -g进行apidoc的安装,如下图。

使用apidocJs快速生成在线文档的实例讲解

等待一定时间(根据自身的网速)的下载和安装之后,如果出现下图所示的信息,则表示apidoc安装成功。

使用apidocJs快速生成在线文档的实例讲解

2、在Windows Shell中输入apidoc -v命令,如果出现如下图所示的界面,则表示apidoc已安装成功。

使用apidocJs快速生成在线文档的实例讲解

初步使用

下面通过一些简单的demo来介绍如何利用apidoc生成一份在线接口文档。

命令行

在正式开始之前,先介绍一下apidoc中的重要命令和参数。apidoc的命令格式如下:

apidoc 参数

一些重要的参数如下表所示:

参数 描述
-f 选择要解析的文件,支持正则表达式。-f参数可以使用多次,多个表达式可以对应不同的-f。如:apidoc -f ".*\.js$" -f ".*\\.ts$"
-i 选择源代码所在的位置。如:apidoc -i myapp/
-o 选择生成的目标文件所在的位置。如:apidoc -o apidoc/
-t 为生成文件选择模板,可以创建和使用自定义的模板。(笔者注:目前为止,笔者还没有使用过这个参数)
-h 跟绝大多数命令一样,这个参数可以打印出帮助文档
apidoc -i src/ -o apidoc/ # 可以通过搜索src目录中的文件快速的生成文档文件,并将这些文件放在apidoc目录下。
apidoc -h # 显示帮助信息

使用apidoc

一个典型的文件目录结果如下图所示。

使用apidocJs快速生成在线文档的实例讲解

其中:

apidoc.json:apidoc的项目级配置文件,它必须位于整个工程目录顶层。

Demo1.java:用于演示的demo源文件,它可以位于整个工程目录的顶层目录及其子目录下。apidoc会搜索整个工程目录选择所有可能的源文件。

apidoc.json和Demo1.java中包含的代码分别如下:

{
 "name": "demo", 
 "version": "1.0.0",
 "description": "这是一个简单的apidoc的demo",
 "title": "demo",
 "url" : "https://api.github.com/v1"
}
/**
 * @api {get} /user/:id Request User information
 * @apiName GetUser
 * @apiGroup User
 *
 * @apiParam {Number} id Users unique ID.
 *
 * @apiSuccess {String} firstname Firstname of the User.
 * @apiSuccess {String} lastname Lastname of the User.
 */

下面通过这个demo来介绍如何生成文档文件。

首先,在Windows Shell中进入apidoc工程目录的上层目录。例如笔者的apidoc的工程位于E:\workspaces\sublime\apidoc路径下。在这个目录中创建名为src的工程目录,将apidoc.json和Demo1.java文件置于src目录下。

使用apidocJs快速生成在线文档的实例讲解

然后,在Windows Shell中输入apidoc -i src/ -o apidoc/命令,如果出现如下图所示的Done结果,则表明文档已经生成,位于同级目录的apidoc(与-o apidoc对应)目录下。

使用apidocJs快速生成在线文档的实例讲解

最后,打开apidoc目录,可以看到如下图所示的静态Web文件。双击index.html就可以在浏览器中打开生成在线接口文档网站。 使用apidocJs快速生成在线文档的实例讲解使用apidocJs快速生成在线文档的实例讲解

这样我们就成功地生成了一份在线接口文档了,接下来就只要部署到任意Web容器(Apache、Tomcat等)就可以将接口文档对外发布了,So easy!

配置

apidoc.json文件是项目级的配置文件,接下来简单地介绍一下其中常用的配置项。

配置名 描述
name 工程名。如果该字段不存在,则apidoc会尝试通过package.json(apidoc顶层配置文件)来生成
version 工程文档的版本号。如果该字段不存在,则apidoc会尝试通过package.json(apidoc顶层配置文件)来生成
description 工程详细描述。如果该字段不存在,则apidoc会尝试通过package.json(apidoc顶层配置文件)来生成
title 文档标题,显示在文档界面的最上方
url 整个api url的前缀,接下来的所有接口url都会加上这个前缀
sampleUrl api示例的url前缀。如果设置了这个值,则界面中显示请求表单,可以用于测试接口
header
title 文档头(header)的连接锚点名
filename 文档头所使用的文件
footer
title 文档尾(footer)的连接锚点名
filename 文档尾所使用的文件
order 接口的排列顺序list,如果不指定,则由apidoc自行确定

一个比较完整的配置文件如下:

{
 "name": "demo",
 "version": "1.0.0",
 "description": "这是一个简单的apidoc的demo",
 "title": "demo",
 "url": "https://api.github.com/v1",
 "sampleUrl": "https://api.github.com/v1/test",
 "header": {
  "title": "header",
  "filename": "header.md"
 },
 "footer": {
  "title": "footer",
  "filename": "footer.md"
 },
 "order": [
  "Error",
  "Define",
  "PostTitleAndError",
  "PostError"
 ]
}

更多的配置项请参考apidoc官方文档站点。

Params

apidoc中最核心的东西就是参数(params)的书写,本节介绍apidoc中一些重要的params。

@api

@api定义一个特定的接口。如果一个注释块既不包含@apiDefine又没有包含@api参数,则apidoc会直接忽略这个注释块。这个参数在界面上表示一个接口区域块如下:

使用apidocJs快速生成在线文档的实例讲解

@api的书写格式为:

@api {method} path [title]

注意,[xxx]表示一个可选的参数,下同。

下表介绍了@api中的参数含义。

参数 描述
method 请求的HTTP方法名,包括DELETE, GET, POST, PUT,更多方法详见http-learn-url
path 请求的url path(不包括前缀)
title 接口名,用于接口索引。这个配置项会显示在导航菜单中。

更多的配置项请参考apidoc官方文档站点。

@apiDefine

@apiDefine表示定义一个变量,该变量可以指代任意值(字符串、参数块),这个参数并且写在独立的代码块中。可以使用@apiUse来使用其定义的变量。

@apiDefine的书写格式为:

@apiDefine name [title] [description]

下表介绍了@apiDefine中的参数含义。

参数 描述
name 值或者块的名字,可以看做就是变量名
title 标题,一般用于@apiParam (name)参数,显示请求参数所在组的名称
description 该变量的描述。

下面的代码定义一个错误块,然后在接口定义中引用使用这个错误块。多个不同接口可以引用同样的@apiDefine块,这也变成语言的变量功能一直。可以消除重复代码。

/**
 * @apiDefine MyError
 * @apiError UserNotFound The <code>id</code> of the User was not found.
 */

/**
 * @api {get} /user/:id
 * @apiUse MyError
 */

@apiDescription

用于@api代码块中,用于详尽地描述接口的功能。

@apiDescription的书写格式为:

@apiDescription text

text就是具体的描述内容,可以直接使用Markdown语法,这极大地丰富了其表现形式。

@apiGroup

表示接口所属的组,最直接的体现就是在侧边导航中将接口分在对用的组中。

@apiGroup的书写格式为:

@apiGroup name

name表示组名,可以是任意字符串。值得注意的是,name不支持中文,一旦输入中文,apidoc就会忽略这些中文字符。如果需要在界面中显示中文接口组名,只需要使用@apiDefine定义一个中文字符串,然后name用变量名替换即可。

/**
 * @apiDefine group 测试
 */

/**
 * @api {get} /user/:id Request User information
 * @apiName GetUser
 * @apiGroup group
 */

@apiName

表示接口的名字,应该在每个@api块中使用。可以生成一个Web锚点,快速定位接口位置。可以看到锚点(url的#后面的字符串)通常由groupName-apiName构成。

@apiName的书写格式为:

@apiName name

@apiUse

表示引用一个@apiDefine定义的值或块,相当于直接替换变量的值。

@apiUse的书写格式为:

@apiUse name

name是一个已定义的@apiDefine中的name,如果输入的name不存在,则会抛出类似下面的异常信息。

{ File: 'src\\Demo1.java',
 Block: 4,
 Element: '@apiUse',
 Groupname: 'test',
 Definition: '@apiUse group',
 Example: '@apiDefine MyValidGroup Some title\n@apiUse MyValidGroup' }

下面是一个示例:

/**
 * @apiDefine test
 * @apiParam {Number} id Users unique ID.
 */

/**
 * @apiUse test
 * @apiParam {Number} name name.
 */

@apiParam

表示一个请求参数。

@apiParam的书写格式为:

@apiParam [(group)] [{type}] [field=defaultValue] [description]

下表介绍了@apiParam中的参数含义。

参数 描述
(group) 参数所在的组,可以使用@apiDefine定义的值
{type} 参数的类型。例如 {Boolean}, {Number}, {String}, {Object}, {String[]} (array of strings), ..
field 请求参数名。
[field] 表示这个参数是个可选参数,非必传参数。
=defaultValue 表示这个参数的默认值。
description 这个请求参数的描述,支持Markdown语法。

下面是一个简单的示例:

/**
 * @api {get} /user/:id
 * @apiParam {Number} id Users unique ID.
 */

/**
 * @api {post} /user/
 * @apiParam {String} [firstname] 用户名(非必填).
 * @apiParam {String} lastname  用户姓(必填).
 */

使用apidocJs快速生成在线文档的实例讲解

@apiSuccess

表示请求成功时的一个返回字段。

@apiSuccess的书写格式为:

@apiSuccess [(group)] [{type}] field [description]

@apiSuccess的参数含义与@apiParam一致,这里就不再做说明了。

@apiError

表示请求失败时的一个返回字段。

@apiError的书写格式为:

@apiError [(group)] [{type}] field [description]

与apiSuccess的参数含义完全一致。

@apiParamExample

表示一个请求范例。

@apiParamExample的书写格式为:

@apiParamExample [{type}] [title] example
参数 描述
{type} 表示请求数据的格式
title 显示在界面上的示例标题
example 示例实体

下面是一个简单的示例:

/**
 * @api {get} /user/:id
 * @apiParamExample {json} Request-Example:
 *  {
 *  "id": 4711
 *  }
 */

@apiSuccessExample

表示一个响应范例。其书写格式和参数含义与@apiParamExample完全一样。

@apiSampleRequest

表示一个接口测试块,可以根据定义的请求参数来生成一个表单,用来进行接口测试。

@apiSampleRequest的书写格式为:

@apiSampleRequest url

url可以与配置文件(apidoc.json)中的sampleUrl以及@api定义的path连接成一个完整的测试url。例如:

/**
 * @api {get} /user/:id
 * @apiParam {Number} id Users unique ID.
 * @apiSampleRequest /test
 */

生成的界面截图如下:

使用apidocJs快速生成在线文档的实例讲解

一些实际经验

下面介绍一下在实际使用过程发现的东西。

绝大部分地方可使用Markdown语法

在几乎所有的描述类字段处都可以使用符合Markdown语法的文本,可以使得文档形式更加美观。

/**
 * @api {get} /user/:id
 * @apiParam {String} rule 
 *
 * - 规则1:不能使用小数
 * - 规则2:不能相加
 */

从下图中可以看到name和age字段的前面有些缩进,而且字段显示名为name和age。

使用apidocJs快速生成在线文档的实例讲解

以上这篇使用apidocJs快速生成在线文档的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
VTK与Python实现机械臂三维模型可视化详解
Dec 13 Python
PyQt5打开文件对话框QFileDialog实例代码
Feb 07 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 Python
wxPython实现带颜色的进度条
Nov 19 Python
Python中使用filter过滤列表的一个小技巧分享
May 02 Python
Python中SQLite如何使用
May 27 Python
python和php哪个容易学
Jun 19 Python
python实现三种随机请求头方式
Jan 05 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 Python
基于Python实现将列表数据生成折线图
Mar 23 Python
Python使用DFA算法过滤内容敏感词
Apr 22 Python
Python自定义线程池实现方法分析
Feb 07 #Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 #Python
Python列表推导式、字典推导式与集合推导式用法实例分析
Feb 07 #Python
浅析Python3爬虫登录模拟
Feb 07 #Python
Python实现的三层BP神经网络算法示例
Feb 07 #Python
Python 12306抢火车票脚本
Feb 07 #Python
django限制匿名用户访问及重定向的方法实例
Feb 07 #Python
You might like
通过html表格发电子邮件
2006/10/09 PHP
php中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
PHP 面向对象详解
2012/09/13 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
JavaScript 学习笔记(六)
2009/12/31 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
获取内联和链接中的样式(js代码)
2013/04/11 Javascript
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
javaScript之split与join的区别(详解)
2017/11/08 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
node.js基础知识小结
2018/02/26 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
解决vuex刷新数据消失问题
2020/11/12 Javascript
Python中Collection的使用小技巧
2014/08/18 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
最大K个数问题的Python版解法总结
2016/06/16 Python
Python之列表实现栈的工作功能
2019/01/28 Python
Python实现快速排序的方法详解
2019/10/25 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
RetroStage德国:复古服装
2019/02/03 全球购物
运动会广播稿100字
2014/01/11 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
购房意向书范本
2014/04/01 职场文书
中秋节主持词
2014/04/02 职场文书
软件售后服务承诺书
2014/05/21 职场文书
庆六一宣传标语
2014/10/08 职场文书
地震慰问信
2015/02/14 职场文书