# Doa Apidoc

> 从需求描述或后端代码生成专业的接口说明文档（API Specification）。 支持 PDF（reportlab）和 Word（python-docx）两种输出格式，商务蓝色主题。 完整工作流： (1) 用户提供需求描述/后端代码/接口定义 (2) 使用 vscode_askQuestions 确认输出格式（PDF / Word / 都要） (3) AI 结构化整理为标准接口文档格式 (4) 生成 Python 脚本并运行输出文档 USE FOR: 生成接口文档、API文档、接口设计说明书、接口说明文档、 API接口文档PDF、API接口文档Word、从代码生成接口文档、 从需求生成接口文档、接口设计文档。 DO NOT USE FOR: 会议纪要（使用 doa-metting skill）、PPT（使用 doa-ppt skill）、 通用PDF处理（使用 pdf skill）。

- Skill: `medalsoftchina/doa-apidoc` (Agent Skill)
- Install (CLI): `npx skillmds@latest add medalsoftchina/doa-apidoc`
- Raw SKILL.md: https://api.skillmd.com/api/skills/medalsoftchina/doa-apidoc/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: medalsoftchina (https://skillmd.com/u/medalsoftchina)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/medalsoftchina/doa-apidoc

---


# 接口说明文档生成

## 工作流

```
用户提供需求/代码 → 确认输出格式(PDF/Word/Both) → AI 结构化整理 → 生成 Python 脚本 → 运行输出文档
```

## Step 0: 确认输出格式

**必须在生成前使用 `vscode_askQuestions` 确认：**

```
问题: 文档输出格式
选项:
  - PDF（适合交付/归档）  ← recommended
  - Word（适合后续编辑）
  - 都要
```

## Step 1: 收集与整理接口信息

从用户提供的需求描述、后端代码、或接口定义中，提取并结构化为以下标准章节：

### 文档元信息（封面）

| 字段 | 说明 |
|------|------|
| 文档标题 | 如「接口说明文档」 |
| 副标题 | 项目名 + 文档类型描述 |
| 文档版本 | V1.0 |
| 编制方 | 默认「{vendor_name}」，用户可覆盖 |
| 接收方 | 文档接收方 |
| 编制日期 | 日期 |
| 文档状态 | 初版发布 / 评审中 / 定稿 |

### 标准章节结构

| 章节 | 内容要求 |
|------|----------|
| **一、接口总览** | 接口清单表格（#/名称/Method/Path/描述）+ 调用链路（ASCII 时序图） |
| **二、公共约定** | 协议、Base URL、鉴权方式、数据格式、公共响应结构、错误码表 |
| **三、接口详细定义** | 每个接口：调用场景 + 请求头 + 入参表 + 入参示例 + 出参表 + 出参示例 + 错误场景 |
| **四、调用时序总结** | 汇总表（步骤/调用方/接口/触发条件/备注） |

### 每个接口的标准子节

```
3.x  {METHOD} {path} — {接口名}
  ├─ 调用场景（ColorBox 高亮）
  ├─ 请求头（如需鉴权）
  ├─ 入参（表格：参数/类型/必填/说明）
  ├─ 入参示例（code_block）
  ├─ 出参（表格：参数/类型/说明）
  ├─ 出参示例 — 成功 / 失败 / 各状态（code_block）
  └─ 错误场景（表格：code/场景）
```

### 内容整理原则

- 从代码/需求中推导完整的入参出参，字段名用 camelCase
- 必填字段标记 ✅
- 嵌套对象用 `parent[].child` 格式展示
- 枚举值列出全部可选项及含义
- 错误码覆盖 400/401/404/422/500 等常见场景
- 示例 JSON 使用真实可读的模拟数据

## Step 2: 生成文档脚本

根据用户选择的格式，读取对应模板：

- **PDF**: 读取 [references/apidoc-pdf-template.py](references/apidoc-pdf-template.py)
- **Word**: 读取 [references/apidoc-word-template.py](references/apidoc-word-template.py)

基于模板生成定制化 Python 脚本，替换其中的内容数据。

### 设计规范

#### 颜色体系（商务蓝主题，PDF/Word 通用）

| 角色 | 色值 | 用途 |
|------|------|------|
| pri | `#1A365D` | 深蓝 - 主标题、表头、页眉线 |
| sec | `#2B6CB0` | 中蓝 - 章节标题(h2) |
| acc | `#3182CE` | 亮蓝 - 小节标题(h3)、强调 |
| lbg | `#EBF4FF` | 浅蓝背景 - 信息卡片、首列 |
| lgray | `#F7FAFC` | 极浅灰 - 交替行 |
| border | `#CBD5E0` | 边框灰 |
| txt | `#2D3748` | 正文色 |
| sub | `#718096` | 辅助文字、页眉页脚 |
| green | `#276749` | 成功/通过 |
| orange | `#C05621` | 警告/待确认 |
| red | `#C53030` | 紧急/重要 |

#### PDF 核心组件

模板提供以下 Flowable 组件：

- **`SectionBar(text, color)`** — 带色块的章节标题栏（白字 + 圆角深蓝底）
- **`InfoCard(rows)`** — 信息卡片（浅蓝底 + 边框，用于封面元信息）
- **`Divider()`** — 分隔线
- **`ColorBox(text, bg, bc)`** — 调用场景高亮框（浅蓝底 + 蓝色边框）
- **`make_table(headers, rows, col_widths)`** — 标准数据表格（深蓝表头 + 交替行）
- **`make_kv_table(rows)`** — 键值表格（左列浅蓝底粗体 + 右列正文）
- **`code_block(text)`** — 代码块（浅灰底 + 蓝色等宽字体）

#### Word 核心组件

模板提供以下函数：

- **`add_section_bar(doc, text, color)`** — 带色块的章节标题栏
- **`add_info_card(doc, rows)`** — 信息卡片
- **`add_divider(doc)`** — 分隔线
- **`add_color_box(doc, text)`** — 调用场景高亮框
- **`add_table(doc, headers, rows, col_widths_mm)`** — 标准数据表格
- **`add_kv_table(doc, rows)`** — 键值表格
- **`add_code_block(doc, text)`** — 代码块
- **`add_paragraph(doc, text, ...)`** — 段落（支持 `<b>` 标记）

#### 页眉页脚

根据实际项目名调整：
- 页眉左：`{项目名} · {文档类型}`
- 页眉右：`CONFIDENTIAL 机密`（可选）
- 页脚左：`{vendor_name}`（默认，用户可覆盖）
- 页脚右：`第 X 页`（PDF）/ `页码请在 Word 中查看`（Word）

## Step 3: 运行生成

输出目录：`output/{项目名称}-接口文档/`（每次新任务创建独立子文件夹）

**PDF:**
```bash
pip install reportlab
python generate_api_doc.py
```

**Word:**
```bash
pip install python-docx
python generate_api_doc_word.py
```

确认文档输出后告知用户文件路径。

## 注意事项

- PDF 字体注册使用 `register_fonts()` 函数，自动适配 Windows/macOS/Linux
- A4 纸张，左右上下边距 20mm
- 每个接口详细定义前使用 `PageBreak()`（PDF）或 `doc.add_page_break()`（Word）分页
- 表格列宽之和应为 ~166mm（PDF）/ 对应 Mm 值（Word），确保不溢出
- 代码块使用等宽字体：PDF 用 CF 蓝色 7.8pt，Word 用 Consolas 8.5pt
- Word 生成的 `.docx` 文件体积小、可继续编辑，适合需要后续调整的场景
- PDF 使用 `repeatRows=1` 让表头在跨页时重复显示

