swagger-jsdoc vs apidoc
API 文档自动化生成方案对比
swagger-jsdocapidoc类似的npm包:

API 文档自动化生成方案对比

apidoc 和 swagger-jsdoc 都是用于从代码注释生成 API 文档的工具,但它们的输出格式和生态系统定位不同。apidoc 专注于生成独立的静态 HTML 文档,支持多种编程语言,适合快速搭建简单的文档站点。swagger-jsdoc 则专注于生成符合 OpenAPI 规范(Swagger)的 JSON/YAML 文件,通常配合 Swagger UI 使用,更适合需要标准化接口定义、自动化测试或网关集成的现代 RESTful 项目。

npm下载趋势

3 年

GitHub Stars 排名

统计详情

npm包名称
下载量
Stars
大小
Issues
发布时间
License
swagger-jsdoc1,596,9321,789710 kB455 个月前MIT
apidoc75,2699,644556 kB843 年前MIT

apidoc vs swagger-jsdoc:文档生成机制与生态集成深度对比

在构建后端服务或前后端分离项目时,API 文档的维护往往是最容易被忽视的环节。apidoc 和 swagger-jsdoc 都试图通过代码注释来解决这个问题,但它们走向了两个不同的方向。一个倾向于生成独立的静态站点,另一个倾向于生成标准化的接口规范文件。让我们从工程实践的角度深入对比这两者。

📄 输出产物:静态 HTML vs 开放规范

apidoc 直接生成一套完整的静态 HTML 文件。

  • 运行命令后,你会得到一个 doc/ 文件夹。
  • 可以直接部署到 Nginx 或 GitHub Pages,无需额外后端服务。
  • 适合快速展示,但难以与其他工具链集成。
# apidoc: 生成静态文件
apidoc -i src/ -o doc/

# 结果:doc/index.html 可直接在浏览器打开

swagger-jsdoc 生成的是 OpenAPI 规范文件(JSON 或 YAML)。

  • 它本身不生成 UI,需要配合 swagger-ui-express 等中间件渲染。
  • 生成的规范文件可以被 API 网关、测试工具或代码生成器复用。
  • 更适合微服务架构中的标准化治理。
// swagger-jsdoc: 生成规范对象
const swaggerSpec = swaggerJsdoc(options);

// 通常配合 express 使用
app.use('/docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));

📝 注释语法:自定义标签 vs 标准 JSDoc

apidoc 使用自己定义的一套标签系统。

  • 标签如 @api, @apiParam, @apiSuccess。
  • 语法直观,专门针对 API 设计,学习成本低。
  • 但仅限于 apidoc 工具识别,其他工具无法解析。
/**
 * @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 工具读取。
  • 语法稍复杂,需要熟悉 OpenAPI 结构。
/**
 * @swagger
 * /user/{id}:
 *   get:
 *     summary: 获取用户信息
 *     parameters:
 *       - in: path
 *         name: id
 *         schema:
 *           type: integer
 *     responses:
 *       200:
 *         description: 成功
 */
app.get('/user/:id', (req, res) => {});

⚙️ 配置方式:独立配置文件 vs 代码内联定义

apidoc 依赖根目录下的 apidoc.json 配置文件。

  • 集中管理项目名称、版本、URL 等元数据。
  • 配置与代码分离,适合多语言项目统一配置。
  • 修改配置后需重新运行生成命令。
// 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);

🌐 生态集成:独立展示 vs 工具链协同

apidoc 是一个相对封闭的工具。

  • 生成的文档主要用于人类阅读。
  • 难以直接导入 Postman 或自动化测试脚本。
  • 适合文档即最终产物的场景。
# apidoc: 主要是离线查看
# 没有标准的 API 导入接口

swagger-jsdoc 是 OpenAPI 生态的一部分。

  • 生成的 JSON 可直接导入 Postman、Insomnia。
  • 支持自动生成客户端 SDK(如 swagger-codegen)。
  • 适合 DevOps 流程中的自动化环节。
// swagger-jsdoc: 可被外部工具消费
// POST /api/docs.json -> 导入到测试平台

🤝 共同点:基于注释的文档维护

尽管两者路径不同,但核心理念一致:让文档靠近代码。

1. 💻 代码即文档

  • 都要求开发者在编写接口逻辑时同步编写注释。
  • 减少了文档与代码不一致的风险。
// 两者都依赖这种注释块
/** 
 * 文档内容在这里 
 */

2. 🔄 自动化生成

  • 都支持通过命令行或构建脚本自动更新文档。
  • 可集成到 CI/CD 流程中,每次提交自动检查文档。
# 都可以添加到 package.json 脚本
"scripts": {
  "docs": "apidoc -i src/ -o doc/"
}

3. 📦 Node.js 友好

  • 都有成熟的 npm 包支持。
  • 都能很好地解析 JavaScript/TypeScript 文件。
// 都支持常见的 Express/Koa 路由结构
app.get('/path', handler);

📊 总结:关键差异对比

特性apidocswagger-jsdoc
输出格式📄 静态 HTML 文件📝 OpenAPI JSON/YAML
注释语法🏷️ 自定义 @api 标签📋 标准 JSDoc + YAML
可视化🖼️ 自带 HTML 界面🧩 需配合 Swagger UI
生态集成🔒 相对独立🌐 支持网关/测试/SDK
配置管理📄 apidoc.json 文件⚙️ 代码对象配置
适用场景🚀 快速展示/内部工具🏢 企业级/标准化服务

💡 最终建议

apidoc 就像是一个快速文档生成器 🖨️——适合需要快速产出可读页面、不关心接口标准化的小型项目或内部工具。它的优势在于简单直接,生成的 HTML 可以直接分发。

swagger-jsdoc 更像是一个接口规范管理器 📐——适合需要长期维护、与其他系统交互、遵循 RESTful 标准的企业级项目。它的优势在于生成的规范文件具有极高的复用价值。

核心思考:如果你的文档只需要给人看,选 apidoc;如果文档还需要给机器看(测试、网关、代码生成),选 swagger-jsdoc。

如何选择: swagger-jsdoc vs apidoc

  • swagger-jsdoc:

    选择 swagger-jsdoc 如果你的团队遵循 OpenAPI 标准,需要与 Swagger UI、API 网关或自动化测试工具集成。它生成的规范文件具有更强的通用性,适合企业级 RESTful 服务架构。

  • apidoc:

    选择 apidoc 如果你需要快速生成独立的 HTML 文档页面,且项目涉及多种编程语言混合开发。它配置简单,不依赖特定的 API 规范标准,适合内部工具或对接口标准化要求不高的场景。

swagger-jsdoc的README

swagger-jsdoc

This library reads your JSDoc-annotated source code and generates an OpenAPI (Swagger) specification.

npm Downloads CI

Getting started

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.

swagger-jsdoc example screenshot

System requirements

  • Node.js 20.x or higher

You are viewing swagger-jsdoc v6 which is published in CommonJS module system.

Installation

npm install swagger-jsdoc --save

Or

yarn add swagger-jsdoc

Supported specifications

  • OpenAPI 3.x
  • Swagger 2
  • AsyncAPI 2.0

Validation of swagger docs

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);

Documentation

Click on the version you are using for further details: