apidoc安装及应用

apidoc安装及应用

apidoc 是一款支持多编程语言Restful API的文档自动生成工具,本文从安装到生成APP接口API文档进行讲解。

参考资料

官方教程: http://apidocjs.com/
中文教程:https://blog.csdn.net/qq_34627459/article/details/71810318
NodeJs下载:http://nodejs.cn/download/

安装NodeJS

apiDoc依赖nodejs,因此需要先搭建nodejs环境后,再通过命令行模式安装apiDoc

  1. 下载NodeJs并配置环境变量,下载页面选择系统对应版本下载即可,此处选择win64位系统zip版
  2. 配置环境变量,同配置jdk环境变量一致,win下将nodejs根目录加入到path环境变量中即可,安装完成后,执行命令确认是否安装成功。
npm -v

安装成功后,出现下图所示

image

安装apiDoc

上一步骤已将nodejs环境安装配置完成,接下来只需要安装apiDoc即可,执行下述命令进行安装

npm install apidoc -g
nodejs 版本

由于本机之前已经安装过了,所以提示如图更新信息,执行以下命令校验是否安装成功

apidoc -v
image

出现上图所示信息,则apiDoc已经安装成功了。

image.png

集成到项目中

1.进入项目根目录下,创建apidoc.json文件,内容如下

{
  "name": "API名称",
  "version": "API主版本号,仅支持3位数字版本号,如:0.0.1",
  "description": "API描述信息",
  "title": "浏览器标题",
  "url": "可选,接口地址,如:http://p2p-12.test13.wangdai.me/sp2p_srd",
  "sampleUrl": "可选,接口调用示例地址,如增加此项,则页面会增加可发送请求示例的操作项",
  "header": {
    "title": "可选,头部标题",
    "filename": "可选,头部文件路径,只支持.md文件"
  },
  "footer": {
    "title": "可选,底部描述",
    "filename": "可选,底部文件路径,只支持.md文件"
  },
  "template": {
    "withCompare": true, //是否允许版本之间进行比较
    "withGenerator": true//是否允许生成多个版本
  }
}

2.进入项目根目录下,创建apidoc.js文件,按需创建版本库文件,如:v9.4.x.js文件。

apidoc.js文件主要用于定义一些公共文档,接口中使用@apiUse引用。
文件不限制于js文件,也可以为java文件,只要apidoc支持的文件类型皆可以正常解析。
版本库文件用于分离apidoc.js文件,存储历史版本变更文档数据,接口变动前将方法上的apidoc文档复制到对应版本库文件中,新文档更新@apiVersion即可,便于后续版本对比。
版本库命名规范:以v+版本号开头,v9.4.0.0-v9.4.9.9均合成到v9.4.x.js文件中,避免创建过多文件。

apidoc.js 文件

/**
 * APP API接口文档
 *
 * 文档基于apidoc编写,官网地址:http://apidocjs.com
 *
 *  如遇版本变更,请将历史api注释复制到原对应版本js文件中,如登录接口升级到4.1.1,则将原4.1.0注释文档复制到v9.4.x.js文件中
 *
 * @author FanWeiJie
 * @date 2018-07-21 08:34:55
 */

/**
 * @apiDefine apidoc
 * @apiParam {int{2,3}} deviceType 请求设备的类型:<code>{1:安卓,2:IOS}</code>
 *
 * @apiSuccess {int{-999-999}} result.code 响应代码<code>{1:成功,<0:失败}</code>
 * @apiSuccess {String} result.msg 响应描述
 */

v9.4.x.js 文件

/**
 * v9.4.x 版本变更更新文档存档
 *
 * @author FanWeiJie
 * @date 2018-07-21 08:34:55
 */
 
/**
* @api {POST} /userLogin 用户登录
* @apiDescription 根据用户名、手机号码+密码登录
* @apiVersion 4.1.0
* @apiName userLogin
* @apiGroup user
*
* @apiUse apidoc
* 
* @apiParam {String{13000000000-19900000000}} mobile 手机号码或者用户名
* @apiParam {String} password 登录密码,使用3DES加密上送
* @apiParam {int{1,2}} [userType=1] 用户类型,<code>{1:个人,2:企业}</code>
*/

3.shift+右键打开命令行窗口,执行下述命令,会创建apidoc目录并将api文档文件生成到该目录下,首次执行该命令,apidoc目录下可能为空,因为代码中尚未编写apidoc文档。

apidoc -i 指定需要生成文档源码根目录 -o 指定输出目录
image

编写apidoc文档

在Controller或者接口定义类中编写apidoc文档,文档中的注解参照官网说明

/**
* @api {POST} /userLogin [123]用户登录
* @apiDescription 根据用户名、手机号码+密码登录
* @apiVersion 4.1.0
* @apiName userLogin
* @apiGroup user
*
* @apiUse apidoc
* 
* @apiParam {String{13000000000-19900000000}} mobile 手机号码或者用户名
* @apiParam {String} password 登录密码,使用3DES加密上送
* @apiParam {int{1,2}} [userType=1] 用户类型,<code>{1:个人,2:企业}</code>
*/
public static String logining(Map<String, String> parameters, Map<String, Object> application) {
    //省略代码
}

<a name="c11fea6c"></a>

apidoc注解

这里只介绍几个常用的,完整更详细的可参考官方文案及示例

@api

@api {method} path [title]

# method 请求方式:GET/POST/PUT/DELETE等
# path 请求路径及参数,不包含域名及contextPath,如:/user/:id
# [title] 可选,接口描述

必须

定义接口的请求方式、请求路径、接口名称、接口描述。

示例

// 获取用户可用红包列表
@api {POST} /redpacketIndex [611]红包列表

规范

定义为何种请求方式没有关系,APP接口调用地址并非此地址,接口名称前统一添加[接口号]便于排序及通过接口号查找。

@apiDescription

@apiDefine name [title] [description]

可选

针对接口的简单描述信息。

示例

//获取用户可用红包列表
@apiDescription 账户中心 > 我的红包 > 红包列表

@apiName

@apiName name

# name 接口名称

定义接口名称,保证全局唯一。

必须

示例

//获取用户可用红包列表
@apiName redpacketIndex

规范

@api中的path变量保持一致。

@apiVersion

@apiVersion version

# 接口版本号,可与apidoc.json文件中的主版本号不一致,需纯数字

必须

定义接口的版本号

示例

@apiVersion 4.1.0

规范

apidoc仅支持3位纯数字版本号,因此去掉晓风系统版本号,从需求版本号开始定义即可,如4.1.0。

@apiGroup

@apiGroup name

必须

接口分组,按需分组,可按照app底部菜单,或按照user等类型分组,接口分组后,生成的文档将会把同一个组的接口汇总一块,效果图如下。

image

示例

@apiGroup reward

@apiParam

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

[(group)] 分组,可选,建议弃用
[{type}] 参数类型:String/Number/Date/Boolean等。
[field=defaultValue] 默认值,设置了默认值则代表该参数为可选参数。
[description] 参数描述信息

必须

定义接口请求参数类型、字段、字段规则、默认值、参数描述。

# 定义一个String类型的参数
@apiParam {String} userId 用户ID

# 定义一个int类型,取值范围在[1-2]之间的值,默认值为1
@apiParam {int{1,2}} [redType=1] 红包类型:<code>{1:奖励红包,2:投资红包}</code>

# 定义一个int类型,取值范围在[000-999]之间的值,默认为1
@apiParam {int{000-999}} [currPage=1] 当前页码

# 定义一个int类型,取值范围在[000-999]之间的值,默认为8
@apiParam {int{000-999}} [pageSize=8] 页记录数

@apiSuccess

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

# [(group)] 分组,可选,建议弃用
# [{type}] 参数类型:String/Number/Date/Boolean等
# field 参数名称
# [description] 参数描述

必须

定义接口请求成功后返回客户端的参数。

示例

# 定义个double的返回参数
@apiSuccess {double} useBalance 可兑换佣金

# 定义一个List类型的返回参数
@apiSuccess {List} cpsUsers 推广会员列表

@apiDefine & @apiUse

@apiDefine name [title] [description]
# name 名称
# [title] 标题,可选
# [desciption] 描述,可选

@apiUse name
# name @apiDefine定义的name属性值

可选

定义一个公共文档,提供接口文档引用,需配合@apiUse使用。

示例

// 定义公共文档
/**
 * @apiDefine apidoc
 * @apiParam {int{2,3}} deviceType 请求设备的类型:<code>{2:安卓,3:IOS}</code>
 *
 * @apiSuccess {int{-999-999}} result.code 响应代码<code>{1:成功,<0:失败}</code>
 * @apiSuccess {String} result.msg 响应描述
 */

// 引用公共文档
@apiUse apidoc
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容