Web API文檔生成工具apidoc

標(biāo)簽(空格分隔): node.js


apidoc可以根據(jù)代碼注釋生成web api文檔,支持大部分主流語言java javascript php coffeescript erlang perl python ruby go...,相對而言瀑凝,web接口的注釋維護(hù)起來更加方便架忌,不需要額外再維護(hù)一份文檔。

apidoc從注釋生成靜態(tài)html網(wǎng)頁文檔丁恭,不僅支持項目版本號曹动,還支持api版本號。

安裝

主頁: http://apidocjs.com
github: https://github.com/apidoc/apidoc
可以使用npm install apidoc -g進(jìn)行安裝涩惑,目前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中執(zhí)行apidoc -h就可以看到很多用法熬的。

apidoc help
apidoc help

下面講講常用的幾個參數(shù)痊硕。

// 典型用法
apidoc -i api/ -o doc/api [-c ./] -f ".*\.js$"

-i 表示輸入,后面是文件夾路徑
-o 表示輸出押框,后面是文件夾路徑
默認(rèn)會帶上-c岔绸,在當(dāng)前路徑下尋找配置文件(apidoc.json),如果找不到則會在package.json中尋找 "apidoc": { }
-f 為文件過濾橡伞,后面是正則表達(dá)式盒揉,示例為只選著js文件
  與-f類似,還有一個 -e 的選項兑徘,表示要排除的文件/文件夾刚盈,也是使用正則表達(dá)式

如果項目輸入和輸出穩(wěn)定,可以編輯Makefile保存命令挂脑,例如:

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

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

配置

項目配置

apidoc.json示例:

{
  "name" : "mysails",
  "version": "1.0.0",
  "title": "mysails", // 瀏覽器標(biāo)題
  "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支持如下關(guān)鍵字

@api {method} path [title]
  只有使用@api標(biāo)注的注釋塊才會在解析之后生成文檔肋联,title會被解析為導(dǎo)航菜單(@apiGroup)下的小菜單
  method可以有空格,如{POST GET}
@apiGroup name
  分組名稱刁俭,被解析為導(dǎo)航欄菜單
@apiName name
  接口名稱橄仍,在同一個@apiGroup下,名稱相同的@api通過@apiVersion區(qū)分牍戚,否者后面@api會覆蓋前面定義的@api
@apiDescription text
  接口描述侮繁,支持html語法
@apiVersion verison
  接口版本,major.minor.patch的形式
  
@apiIgnore [hint]
  apidoc會忽略使用@apiIgnore標(biāo)注的接口翘魄,hint為描述
@apiSampleRequest url
  接口測試地址以供測試鼎天,發(fā)送請求時,@api method必須為POST/GET等其中一種

@apiDefine name [title] [description]
  定義一個注釋塊(不包含@api)暑竟,配合@apiUse使用可以引入注釋塊
  在@apiDefine內(nèi)部不可以使用@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]
  用法基本類似斋射,分別描述請求參數(shù)育勺、頭部,響應(yīng)錯誤和成功
  group表示參數(shù)的分組罗岖,type表示類型(不能有空格)涧至,入?yún)⒖梢远x默認(rèn)值(不能有空格)
@apiParamExample [{type}] [title] example
@apiHeaderExample [{type}] [title] example
@apiErrorExample [{type}] [title] example
@apiSuccessExample [{type}] [title] example
  用法完全一致,但是type表示的是example的語言類型
  example書寫成什么樣就會解析成什么樣桑包,所以最好是書寫的時候注意格式化南蓬,(許多編輯器都有列模式,可以使用列模式快速對代碼添加*號)
  
@apiPermission name
  name必須獨一無二哑了,描述@api的訪問權(quán)限赘方,如admin/anyone

示例:

定義一個200的返回結(jié)果

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

定義一個500的返回結(jié)果

/**
 * @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
 */

最后生成文檔之后,結(jié)果如下所示

示例
示例
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弱左,一起剝皮案震驚了整個濱河市窄陡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拆火,老刑警劉巖跳夭,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異们镜,居然都是意外死亡币叹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門模狭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颈抚,“玉大人,你說我怎么就攤上這事胞皱⌒耙猓” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵反砌,是天一觀的道長雾鬼。 經(jīng)常有香客問我,道長宴树,這世上最難降的妖魔是什么策菜? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮酒贬,結(jié)果婚禮上又憨,老公的妹妹穿的比我還像新娘。我一直安慰自己锭吨,他們只是感情好蠢莺,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著零如,像睡著了一般躏将。 火紅的嫁衣襯著肌膚如雪锄弱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天祸憋,我揣著相機(jī)與錄音会宪,去河邊找鬼。 笑死蚯窥,一個胖子當(dāng)著我的面吹牛掸鹅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拦赠,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼巍沙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了矛紫?” 一聲冷哼從身側(cè)響起赎瞎,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颊咬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牡辽,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡喳篇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了态辛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麸澜。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奏黑,靈堂內(nèi)的尸體忽然破棺而出炊邦,到底是詐尸還是另有隱情,我是刑警寧澤熟史,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布馁害,位于F島的核電站,受9級特大地震影響蹂匹,放射性物質(zhì)發(fā)生泄漏碘菜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一限寞、第九天 我趴在偏房一處隱蔽的房頂上張望忍啸。 院中可真熱鬧,春花似錦履植、人聲如沸计雌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凿滤。三九已至传泊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸭巴,已是汗流浹背眷细。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留鹃祖,地道東北人溪椎。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像恬口,于是被迫代替她去往敵國和親校读。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容