apidoc 和 swagger-jsdoc 都是用于从代码注释生成 API 文档的工具,但它们的输出格式和生态系统定位不同。apidoc 专注于生成独立的静态 HTML 文档,支持多种编程语言,适合快速搭建简单的文档站点。swagger-jsdoc 则专注于生成符合 OpenAPI 规范(Swagger)的 JSON/YAML 文件,通常配合 Swagger UI 使用,更适合需要标准化接口定义、自动化测试或网关集成的现代 RESTful 项目。
在构建后端服务或前后端分离项目时,API 文档的维护往往是最容易被忽视的环节。apidoc 和 swagger-jsdoc 都试图通过代码注释来解决这个问题,但它们走向了两个不同的方向。一个倾向于生成独立的静态站点,另一个倾向于生成标准化的接口规范文件。让我们从工程实践的角度深入对比这两者。
apidoc 直接生成一套完整的静态 HTML 文件。
doc/ 文件夹。# apidoc: 生成静态文件
apidoc -i src/ -o doc/
# 结果:doc/index.html 可直接在浏览器打开
swagger-jsdoc 生成的是 OpenAPI 规范文件(JSON 或 YAML)。
swagger-ui-express 等中间件渲染。// swagger-jsdoc: 生成规范对象
const swaggerSpec = swaggerJsdoc(options);
// 通常配合 express 使用
app.use('/docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
apidoc 使用自己定义的一套标签系统。
@api, @apiParam, @apiSuccess。/**
* @api {get} /user/:id 获取用户信息
* @apiName GetUser
* @apiGroup User
* @apiParam {Number} id 用户唯一 ID
* @apiSuccess {String} name 用户姓名
*/
app.get('/user/:id', (req, res) => {});
swagger-jsdoc 基于标准 JSDoc,嵌入 YAML 格式的 OpenAPI 定义。
@swagger 或 @openapi 标签包裹 YAML 内容。/**
* @swagger
* /user/{id}:
* get:
* summary: 获取用户信息
* parameters:
* - in: path
* name: id
* schema:
* type: integer
* responses:
* 200:
* description: 成功
*/
app.get('/user/:id', (req, res) => {});
apidoc 依赖根目录下的 apidoc.json 配置文件。
// apidoc.json
{
"name": "My API",
"version": "1.0.0",
"description": "API 文档说明",
"title": "My API Documentation"
}
swagger-jsdoc 在代码中初始化配置对象。
swagger.js 或启动文件中。// swagger.js
const options = {
definition: {
openapi: '3.0.0',
info: {
title: 'My API',
version: '1.0.0'
}
},
apis: ['./src/routes/*.js']
};
const swaggerSpec = swaggerJsdoc(options);
apidoc 是一个相对封闭的工具。
# apidoc: 主要是离线查看
# 没有标准的 API 导入接口
swagger-jsdoc 是 OpenAPI 生态的一部分。
// swagger-jsdoc: 可被外部工具消费
// POST /api/docs.json -> 导入到测试平台
尽管两者路径不同,但核心理念一致:让文档靠近代码。
// 两者都依赖这种注释块
/**
* 文档内容在这里
*/
# 都可以添加到 package.json 脚本
"scripts": {
"docs": "apidoc -i src/ -o doc/"
}
// 都支持常见的 Express/Koa 路由结构
app.get('/path', handler);
| 特性 | apidoc | swagger-jsdoc |
|---|---|---|
| 输出格式 | 📄 静态 HTML 文件 | 📝 OpenAPI JSON/YAML |
| 注释语法 | 🏷️ 自定义 @api 标签 | 📋 标准 JSDoc + YAML |
| 可视化 | 🖼️ 自带 HTML 界面 | 🧩 需配合 Swagger UI |
| 生态集成 | 🔒 相对独立 | 🌐 支持网关/测试/SDK |
| 配置管理 | 📄 apidoc.json 文件 | ⚙️ 代码对象配置 |
| 适用场景 | 🚀 快速展示/内部工具 | 🏢 企业级/标准化服务 |
apidoc 就像是一个快速文档生成器 🖨️——适合需要快速产出可读页面、不关心接口标准化的小型项目或内部工具。它的优势在于简单直接,生成的 HTML 可以直接分发。
swagger-jsdoc 更像是一个接口规范管理器 📐——适合需要长期维护、与其他系统交互、遵循 RESTful 标准的企业级项目。它的优势在于生成的规范文件具有极高的复用价值。
核心思考:如果你的文档只需要给人看,选 apidoc;如果文档还需要给机器看(测试、网关、代码生成),选 swagger-jsdoc。
选择 swagger-jsdoc 如果你的团队遵循 OpenAPI 标准,需要与 Swagger UI、API 网关或自动化测试工具集成。它生成的规范文件具有更强的通用性,适合企业级 RESTful 服务架构。
选择 apidoc 如果你需要快速生成独立的 HTML 文档页面,且项目涉及多种编程语言混合开发。它配置简单,不依赖特定的 API 规范标准,适合内部工具或对接口标准化要求不高的场景。
This library reads your JSDoc-annotated source code and generates an OpenAPI (Swagger) specification.
Imagine having API files like these:
/**
* @openapi
* /:
* get:
* description: Welcome to swagger-jsdoc!
* responses:
* 200:
* description: Returns a mysterious string.
*/
app.get('/', (req, res) => {
res.send('Hello World!');
});
The library will take the contents of @openapi (or @swagger) with the following configuration:
const swaggerJsdoc = require('swagger-jsdoc');
const options = {
definition: {
openapi: '3.0.0',
info: {
title: 'Hello World',
version: '1.0.0',
},
},
apis: ['./src/routes*.js'], // files containing annotations as above
};
const openapiSpecification = swaggerJsdoc(options);
The resulting openapiSpecification will be a swagger tools-compatible (and validated) specification.

You are viewing swagger-jsdoc v6 which is published in CommonJS module system.
npm install swagger-jsdoc --save
Or
yarn add swagger-jsdoc
By default swagger-jsdoc tries to parse all docs to it's best capabilities. If you'd like to you can instruct an Error to be thrown instead if validation failed by setting the options flag failOnErrors to true. This is for instance useful if you want to verify that your swagger docs validate using a unit test.
const swaggerJsdoc = require('swagger-jsdoc');
const options = {
failOnErrors: true, // Whether or not to throw when parsing errors. Defaults to false.
definition: {
openapi: '3.0.0',
info: {
title: 'Hello World',
version: '1.0.0',
},
},
apis: ['./src/routes*.js'],
};
const openapiSpecification = swaggerJsdoc(options);
Click on the version you are using for further details: