[TOC]
### 为前端同学占坑
> 随着Angular、Vue和react Native等前端框架的流行和发展,SPA项目逐渐成为应用趋势,前端页面的构建也多采用MVVM的模式,前后端开始做到真正的分离,对于前端来说,后端只需要提供API接口就行了。作为一名后端程序员,如何方便省事地为前端提供交互接口文档,成为了我们必须要考虑的问题。这里介绍一款Web API文档生成工具名为apidoc,可以根据代码注释生成静态html网页文档,不仅支持项目版本号,还支持api版本号,方便比较和阅读。
### 安装
Win环境下安装方法:
1. 官网nodejs.org下载[nodejs](https://nodejs.org/en/download/)
2. 安装好后将npm 替换为淘宝镜像cnpm
`C:\Users\Administrator>npm install -g cnpm --registry=https://registry.npm.taobao.org`
3. 使用cnpm安装apidoc
`C:\Users\Administrator>cnpm install apidoc -g`
### 用法
> apidoc -i myproj/ -o mydoc/ [-c ./] -f ".*\.js$"
> -i 表示输入,后面是文件夹路径
> -o 表示输出,后面是文件夹路径
> 默认会带上-c,在当前路径下寻找配置文件(apidoc.json),如果找不到则会在package.json中寻找 "apidoc": { }
> -f 为文件过滤,后面是正则表达式,示例为只选着js文件
> 与-f类似,还有一个 -e 的选项,表示要排除的文件/文件夹,也是使用正则表达式
### 配置
新建apidoc.json文件,可参照[官方配置示例](http://apidocjs.com/#configuration)
~~~
{
"name": "example",
"version": "0.1.0",
"description": "apiDoc basic example",
"title": "Custom apiDoc browser title",
"url" : "https://api.github.com/v1"
}
~~~
我的配置如下
~~~
{
"name": "APP项目接口",
"version": "0.0.1",
"description": "测试接口",
"title": "APP项目接口",
"url" : "http://www.apidemo.com/interface",
"order": ["Home","User"],
"template": {
"forceLanguage": "zh_cn"
}
}
~~~
### 操作
1.在含有apidoc.json的文件夹(例如apidemo)下新建myproj文件夹和mydoc文件夹,在myproj文件夹下新建demo.php(注意文件格式要保存为utf-8,否则生成的API文档带中文的注释会产生乱码),我的demo.php代码如下:
~~~
<?php
namespace app\www\controller;
class Demo
{
/**
* @apiDefine UserNotFoundError
*
* @apiError UserNotFound The <code>id</code> of the User was not found
*
* @apiErrorExample Error-Response:
* HTTP/1.1 404 Not Found
* {
* "error": "用户未找到"
* }
*/
/**
* @api {get/post} /demo/info 获取用户信息
* @apiName user-info
* @apiGroup User
*
* @apiParam {int} id 用户ID
*
* @apiSuccess {String} firstname 用户姓
* @apiSuccess {String} lastname 用户名
*
* @apiSuccessExample Success-Response:
* HTTP/1.1 200 OK
* {
* "firstname": "John",
* "lastname": "Doe"
* }
*
* @apiUse UserNotFoundError
*/
/**
* @api {get} /demo/edit 修改用户信息
* @apiName user-edit
* @apiGroup User
*
* @apiParam {int} id 用户ID
* @apiParam {String} firstname 用户姓
* @apiSuccess {String} firstname 用户姓
* @apiSuccess {String} lastname 用户名
*
* @apiSuccessExample {json} 成功返回
* HTTP/1.1 200 OK
* {
* "code": 200,
* "data": {},
* "msg": "xxx",
* "url":""
* }
*
* @apiUse UserNotFoundError
*/
public function edit(){
//todo
}
/**
* @api {get} /demo/list 列表接口
* @apiVersion 0.0.2
* @apiName article-list
* @apiGroup Home
*
*
* @apiParam {int} page=1 页数
* @apiParam {int} [pageSize=10] 分页大小
* @apiParam {String} keyword 关键词
* @apiParam {String} sortType 排序类型
*
* @apiSuccess (data) {int} page 当前页
* @apiSuccess (data) {int} pcount 最后一页
* @apiSuccess (data) {int} count 总条数
* @apiSuccess (data) {array} data 数据
*
* @apiSuccessExample {json} 成功返回
* HTTP/1.1 200 OK
* {
* "code": 200,
* "data": {},
* "msg": "xxx",
* "url":""
* }
* @apiErrorExample {json} 失败返回
* HTTP/1.1 200 OK
* {
* "code": 5xx
* "msg": "xxx"
* }
*
*/
public function list(){
//todo
return '';
}
}
~~~
2.回到apidemo文件夹下,按住shift键并点击鼠标右键选择“在此处打开命令窗口”,在命令窗口中执行如下命令:
> apidoc -i myapp/ -o mydoc/
3.打开mydoc文件夹可以看到生成了含有index.html的网页文档,用浏览器打开index.html文件,效果图如下:
![](https://box.kancloud.cn/d6e430f34bf080d00be177bd9d873778_1298x601.jpg)
4.该demo代码我已上传到github,可[下载学习](https://github.com/scalerone/learnApiDoc/tree/master/demo5)。
### 遇到的问题
问题描述:
>在该静态文档下,选择相关接口,发送请求,收不到返回的json数据,打开浏览器F12中选择console可以看到,存在跨域问题。如下图所示:
解决办法:
> 将生成的api文档mydoc文件夹放在访问接口的同域名下,通过域名访问index.html。即在thinkphp5项目中,把mydoc文件夹放在入口文件index.php的同级目录下,通过http://www.apidemo.com/mydoc/index.html访问。
### 学习资料
apidoc相关参数详解,学习可参照官方教程和相关博客
1. [apidoc的介绍和使用](http://blog.csdn.net/lvbaolin123/article/details/52671677)
2. [使用apidoc 生成Restful web Api文档](http://blog.csdn.net/soslinken/article/details/50468896)
3. [ 官方教程](http://apidocjs.com/)