Web API文档生成工具apidoc

作者: xun | 来源:发表于2015-09-16 17:33 被阅读86254次

    标签(空格分隔): node.js


    apidoc可以根据代码注释生成web api文档,支持大部分主流语言java javascript php coffeescript erlang perl python ruby go...,相对而言,web接口的注释维护起来更加方便,不需要额外再维护一份文档。

    apidoc从注释生成静态html网页文档,不仅支持项目版本号,还支持api版本号。

    安装

    主页: http://apidocjs.com
    github: https://github.com/apidoc/apidoc
    可以使用npm install apidoc -g进行安装,目前0.12.x/4.0都可以使用。

    apidoc支持Grunt,主页 https://github.com/apidoc/grunt-apidoc

    1. 在项目中使用npm install grunt-apidoc --save-dev安装。
    2. Gruntfile.js添加grunt.loadNpmTasks('grunt-apidoc');
    3. 配置grunt task
    apidoc: {
          myapp: {
            src: "app/",
            dest: "apidoc/"
          }
    }
    
    // 在sails中2和3可以直接添加一个task
    module.exports = function(grunt) {
    
        grunt.config.set('clean', {
          apidoc: {
            myapp: {
              src: "app/",
              dest: "apidoc/"
            }
          }
        });
    
        grunt.loadNpmTasks('grunt-apidoc');
    };
    

    用法

    可以在shell中执行apidoc -h就可以看到很多用法。

    apidoc helpapidoc help

    下面讲讲常用的几个参数。

    // 典型用法
    apidoc -i api/ -o doc/api [-c ./] -f ".*\.js$"
    
    -i 表示输入,后面是文件夹路径
    -o 表示输出,后面是文件夹路径
    默认会带上-c,在当前路径下寻找配置文件(apidoc.json),如果找不到则会在package.json中寻找 "apidoc": { }
    -f 为文件过滤,后面是正则表达式,示例为只选着js文件
      与-f类似,还有一个 -e 的选项,表示要排除的文件/文件夹,也是使用正则表达式
    

    如果项目输入和输出稳定,可以编辑Makefile保存命令,例如:

    docs:
        @apidoc -i api/ -o doc/apidoc
    

    之后使用make docs即可生成/更新api文档。

    配置

    项目配置

    apidoc.json示例:

    {
      "name" : "mysails",
      "version": "1.0.0",
      "title": "mysails", // 浏览器标题
      "description": "xun's test project"
    }
    

    如果放入package.json中,相同的字段可以直接使用package.json的定义,额外的字段放入apidoc

    {
      "name": "mysails",
      "private": true,
      "version": "1.0.0",
      "description": "xun's test project",
      "apidoc": {
        "title": "mysails"
      },
      ...
    }
    

    代码注释

    apidoc支持如下关键字

    @api {method} path [title]
      只有使用@api标注的注释块才会在解析之后生成文档,title会被解析为导航菜单(@apiGroup)下的小菜单
      method可以有空格,如{POST GET}
    @apiGroup name
      分组名称,被解析为导航栏菜单
    @apiName name
      接口名称,在同一个@apiGroup下,名称相同的@api通过@apiVersion区分,否者后面@api会覆盖前面定义的@api
    @apiDescription text
      接口描述,支持html语法
    @apiVersion verison
      接口版本,major.minor.patch的形式
      
    @apiIgnore [hint]
      apidoc会忽略使用@apiIgnore标注的接口,hint为描述
    @apiSampleRequest url
      接口测试地址以供测试,发送请求时,@api method必须为POST/GET等其中一种
    
    @apiDefine name [title] [description]
      定义一个注释块(不包含@api),配合@apiUse使用可以引入注释块
      在@apiDefine内部不可以使用@apiUse
    @apiUse name
      引入一个@apiDefine的注释块
    
    @apiParam [(group)] [{type}] [field=defaultValue] [description]
    @apiHeader [(group)] [{type}] [field=defaultValue] [description]
    @apiError [(group)] [{type}] field [description]
    @apiSuccess [(group)] [{type}] field [description]
      用法基本类似,分别描述请求参数、头部,响应错误和成功
      group表示参数的分组,type表示类型(不能有空格),入参可以定义默认值(不能有空格)
    @apiParamExample [{type}] [title] example
    @apiHeaderExample [{type}] [title] example
    @apiErrorExample [{type}] [title] example
    @apiSuccessExample [{type}] [title] example
      用法完全一致,但是type表示的是example的语言类型
      example书写成什么样就会解析成什么样,所以最好是书写的时候注意格式化,(许多编辑器都有列模式,可以使用列模式快速对代码添加*号)
      
    @apiPermission name
      name必须独一无二,描述@api的访问权限,如admin/anyone
    

    示例:

    定义一个200的返回结果

    /** js
     * @apiDefine CODE_200
     * @apiSuccess (Reponse 200) {number} code 200
     * @apiSuccess (Reponse 200) {json} [data='""'] 如果有数据返回
     * @apiSuccessExample {json} Response 200 Example
     *   HTTP/1.1 200 OK
     *   {
     *     "code": 200,
     *     "data": ""
     *   }
     */
    

    定义一个500的返回结果

    /**
     * @apiDefine CODE_500
     * @apiSuccess (Response 500) {number} code 500
     * @apiSuccess (Response 500) {string} [message] error description
     * @apiSuccessExample {json} Response 500 Example
     *   HTTP/1.1 500 Internal Server Error
     *   {
     *     "code": 500
     *     "message": "xxx"
     *   }
     */
    

    定义接口

    /**
     * @apiDefine Data
     *
     * @apiParam (data) {string} [firstname]  Optional Firstname of the User.
     * @apiParam (data) {string} lastname     Mandatory Lastname.
     * @apiParam (data) {string} country="cn" Mandatory with default value "DE".
     * @apiParam (data) {number} [age=18]     Optional Age with default 18.
     */
    
    /**
     * @api {POST GET} /api/test/hello[/:id] /api/test/hello[/:id]
     * @apiName test api
     * @apiGroup Hello World
     * @apiVersion 1.0.0
     * @apiDescription just a test
     * @apiPermission anyone
     * @apiSampleRequest http://test.github.com
     *
     * @apiParam {number} [id] any id
     * @apiParam {json} data object
     * @apiUse Data
     *
     * @apiParamExample {json} Request Example
     *   POST /api/test/hello/1
     *   {
     *     "data": {
     *       "firstname": "test",
     *       "lastname": "sails",
     *       "country": "cn"
     *     }
     *   }
     *
     * @apiUse CODE_200
     * @apiUse CODE_500
     */
    

    最后生成文档之后,结果如下所示

    示例示例

    相关文章

      网友评论

      • LynchPi:几年前用的时候发现不支持分组,不支持中文....自己就改了下源码,凑合用。不知道现在有没有修复和新增一些功能
      • wdom:要修改很多代码才能完成文档生成,好烦呀,小白哭了,其实人家一个小工具就完成同样的功能的
        Wisdom RESTClient
        https://github.com/Wisdom-Projects/rest-client
      • 96ab38e73bfe:写的挺不错的,已经收藏了。

        源码解析:http://suo.im/1FKU2k


        e717d49b5f9f:恩恩

        还不错那
      • 老付frankr:一直在用 http://apizza.cc 在线api文档管理
      • 方志朋:你好,@api {get} /user/:id 根据用户id获取用户信息 这样写,执行命令,不能生成,提升Empty parser result,怎么解决
      • 囧_囧:文章中 示例图片 找不到了,修正下地址呗
      • c3fb70a346aa:可以试试这个markdown转成HTML网站的:http://docs.9aipay.com/
      • a2d5f8877582:怎么图片都没了大哥,,,想看下效果啊
      • fantiq:分组不能 多级分类吗?
      • 16f5e8b6a834:参数是文件怎么破
      • 张鸣筝:学习了
      • 飞翔dzq:apiGroup能用中文吗?
        青格er:@飞翔dzq
        在你的每个分组下的API中添加以下注释(java):
        /**
        * @apiDefine UserGroup
        *
        * 用户组
        */
        那么在导航的测边栏apiGroup名就是中文的了
        477336cf1c94:@衣草音 在你的apidoc安装文件下面,我的是在
        C:\Users\Administrator\AppData\Roaming\npm\node_modules\apidoc\node_modules\apidoc-core,搜索api_group.js ,会出现两个文件,修改比较大的那个,注释掉
        //group = group.replace(/[^\w]/g, '_');
        05b0ca3b1de2:@飞翔dzq :clap: 同问 这个问题解决了吗 怎么改脚本
      • Dustin15:测试总是返回 error:0 ,怎么破! 测试能用么
        梦蝶Two:@koukou890 您好,mac 也遇到了 返回 error:0 的问题,请教怎么解决?
        2c3a0559166b:@Yang丶_
        这个是 跨域导致的 你可以添加一行代码
        java下的
        ```
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.addHeader("Access-Control-Allow-Methods", "get, post, put, delete, options");
        response.addHeader("Access-Control-Allow-Headers", "origin, content-type, accept");
        response.addHeader("Access-Control-Allow-Credentials", "true");
        ```
        cf58e5bc1958:@Dustin15 这个问题你解决了嘛,我现在也遇到这个问题了。
      • 我喊合作你就炸:为什么发送样品申请几个字是繁体的,能变成简体的吗?
        xun:@我喊合作你就炸 https://github.com/apidoc/apidoc/blob/master/template/locales/zh.js这个文件,或者改生成好的文件/apidoc/locales/zh.js
      • 龟在:英文渣滓的文档盲的救赎啊 么么哒
      • 80df72d61e88:在线测试的模式怎么设置啊 java
        这个调用好像都是.json模式的 如果需要直接url怎么设置?
        xun:@Vic_虾米 你要先搭建你的测试环境,url配置成你的测试地址

      本文标题:Web API文档生成工具apidoc

      本文链接:https://www.haomeiwen.com/subject/edlbcttx.html