ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenAPI-Specification 规范文档的 Markdown 结构与 md2html 发布管道解析

OpenAPI-Specification 规范文档的 Markdown 结构与 md2html 发布管道解析 API设计文档后端【免费下载链接】OpenAPI-SpecificationThe OpenAPI Specification Repository项目地址https://gitcode.com/gh_mirrors/op/OpenAPI-Specification点击查看免费下载OpenAPI Specification 仓库OAS不仅定义了 HTTP API 的开放描述标准其自身的规范正文versions/*.md与src/oas.md也有一套严格的 Markdown 编写约定并通过 md2html 工具链转换为 W3C 风格respec 格式的 HTML 规范文档。本文以仓库测试夹具 basic-old.md 为骨架逐层剖析规范文档的标题层级、版本头、conformance 章节、手写目录TOC处理、锚点与修订历史表格等结构约定并结合 md2html.test.mjs 测试、spec.config.json 构建配置与真实版本文件说明这套 Markdown 规范如何被解析、校验并最终发布。读完本文你将理解 OAS 规范文档的书写模板、md2html 转换的行为边界以及如何在本仓库中验证这些约定。一、为什么规范正文需要一套 Markdown 约定OpenAPI Specification 的源码是 Markdown 文档发布物则是 HTML。从仓库结构与构建脚本可以推断出如下链路规范主源文件位于src/oas.md由 spec.config.json 中specSrc与release.sourcePath字段指明每个已发布版本在 versions 目录下对应一份X.Y.Z.md如 3.2.1.md、3.1.1.md、3.0.4.md构建时由oai/build-infra包中的 md2html 工具把 Markdown 转成带 respec 配置的 HTML 规范页。正因为转换是程序化的规范正文的 Markdown 结构就必须稳定、可预测哪些标题进入什么层级、哪个段落成为 conformance 章节、手写目录如何被丢弃、锚点如何保留全部由约定与代码共同保证。tests/md2html/fixtures/目录下的basic-old.md旧输入与basic-new.md新输入正是用来锁定这些行为的样例而basic-old.html、basic-new.html是它们对应的期望输出。二、从 basic-old.md 解剖规范文档的 Markdown 骨架basic-old.md虽然名为 fixture其内容正是 OAS 规范正文的缩微模板。逐行分析可以看到以下几个核心结构块# Heading 1 Text for first chapter #### Version 30.0.1 This is the conformance section ## Table of Contents Will be removed ## Heading 2 Text for first section a nameparameterAllowEmptyValue/Broken anchor ### Heading 3 Text for first subsection Version | Date --------|----------- 30.0.1 | 3001-04-011. 文档级标题H1与版本头Version 头第一行# Heading 1对应真实文档中的# OpenAPI Specification标题见 3.0.4.md。紧随其后的#### Version 30.0.1是版本头。在真实仓库中它的层级并不统一早期版本使用四级标题#### Version x.y.z如 3.0.0.md、3.1.0.md从 3.0.4 开始改为二级标题## Version 3.0.4见 3.0.4.md、3.1.1.md、3.2.0.md。在输出 HTML 中该版本头被转换为section classoverride idconformance一致性章节见 basic-old.html 第 17–18 行正文This is the conformance section即一致性声明段。2. 手写 Table of Contents 会被移除## Table of Contents一节在目标 HTML 中完全不存在。原因从 respec 机制可以理解规范页的目录由 respec 脚本根据文档标题结构自动生成对应 HTML 中的#toc因此手写的 TOC 必须删除以避免重复与混乱。这一点在 basic-old.html 与 basic-new.html 中均有验证输入里的## Table of Contents / Will be removed没有出现在任何输出中。3. 锚点anchor的处理a nameparameterAllowEmptyValue/Broken anchor展示了两种行为该写法对应真实规范中为关键概念插入的锚点如3.1.1.md中大量[附录引用](#appendix-...)依赖这类目标锚点在旧格式中它以裸a name.../出现在段落中间HTML 输出将其转换为span idparameterAllowEmptyValue/span见 basic-old.html 第 21 行而新格式则要求在段内使用a namefirst-anchor/a并生成span idfirst-anchor/span见 basic-new.html 第 20 行。4. 修订历史表格Revision History文档末尾的 Markdown 表格是规范正文的固定收尾结构Version | Date --------|----------- 30.0.1 | 3001-04-01md2html 将其转换为标准的tabletheadtbody结构basic-old.html 第 24–37 行。在真实规范中这一节是## Appendix A: Revision History例如 3.1.1.md 的附录 A 即修订历史。从basic-new.md看新格式还会显式标注## Appendix A: Revision History标题使章节进入 respec 的 appendix 语义对应 basic-new.html 中section classappendix。三、md2html 测试如何锁定这些行为测试位于 md2html.test.mjs它把fixtures/下每个.md文件作为输入运行oai/build-infra的 md2html.js并将输出与同名的.html期望文件做严格比对const expected readFileSync(folder entry.name.replace(.md, .html), utf8); const output await md2html( [ --spec-config, spec.config.json, --maintainers, entry.name.replace(.md, .maintainers), entry.name, path/31.0.0.md\npath/30.0.1.md\npath/30.0.0.md, ], folder, ); expect(output.stdout).to.equal(expected);从中可以提取三条关键信息配置来源转换依赖仓库根目录的 spec.config.json测试中通过--spec-config传入该文件定义了slug、shortName、titleName、abstractText、participateLinks、schemas、release等元数据fixtures 目录下另有副本 spec.config.json供测试独立运行。维护者列表通过--maintainers传入对应的.maintainers文件例如 basic-old.maintainers 中* Foo Bar foobar会被注入 HTML 的 respec 配置editors字段。版本列表md2html 会收到一份已发布版本清单path/31.0.0.md\npath/30.0.1.md\npath/30.0.0.md用于生成 respec 配置中的otherLinksOther versions 下拉项。因此在修改规范 Markdown 时fixtures目录既是模板样本也是回归测试的基线任何改变标题层级、锚点转换或表格渲染的行为都会导致测试失败。四、真实版本文件的印证结构与 appendix 体系将 fixture 的骨架与真实规范对照可以看到约定在实际文档中的规模版本头versions/3.0.4.md在标题下直接书写## Version 3.0.4与 BCP 14 关键词说明MUST / SHOULD / MAY 等随后是## Introduction、## Definitions等章节3.0.4.md。Definitions 体系basic-new.md演示了## Definitions下挂### Foo定义条目真实文档中### OpenAPI Description、### OpenAPI Document、### Schema均按此模式组织3.0.4.mdmd2html 会为其生成dfn定义标记。锚点与交叉引用规范正文大量使用[See Appendix ...](#appendix-...)形式的内部链接例如 3.1.1.md 中的附录 E百分号编码、附录 DHeader 与 Cookie 序列化等交叉引用这些目标锚点依赖 md2html 对a name/span id的稳定转换。修订历史真实文档以## Appendix A: Revision History收尾3.1.1.md与 fixture 的表格结构一一对应。五、代码块语言与媒体类型从 basic-new.md 看目标输出能力basic-new.md作为新格式样例展示了 md2html 对代码块语言标签的完整支持面这也是规范正文中嵌入示例的标准做法语言标签说明样例内容json/yaml最常见的规范示例如{foo: true}/foo: true配置片段text、无语言、unknown普通文本无高亮text/plain等uriURL 示例含查询串与片段https://foo.com/bar?bazquxfredwaldo#fragmenturitemplateRFC6570 URI 模板https://foo.com/bar{?baz*,qux}multipartmultipart 媒体类型示例含Content-Type、Content-Location与正文--boundary-example分节eventstreamSSE 事件流event/data/retry/注释行addString、addNumber、addJSON事件jsonl/ndjson每行一个 JSON 对象事件流对应的行式 JSONjsonseqJSON 文本序列0x1E分隔符 JSON 对象带时间戳的两条日志这些代码块在输出 HTML 中被包装为pre classnohighlightcode并使用 hljs 主题高亮见 basic-new.html 第 32–103 行。此外basic-new.md还展示了 RFC 引用写法如[[RFC3986]]、[[RFC9110]]md2html 会将其转换为 bibref 引用或带 Section 链接的引用形式而规范正文中的 BCP 14 / RFC 关键词引用见 3.0.4.md即属于此类。六、Markdown 校验与发布配置层面的支撑除转换外仓库还有一整套配置约束规范正文的书写质量Markdown 风格规则根目录的 spec.markdownlint.yaml 规定标题必须使用 ATX#前缀风格MD003、无序列表必须用*MD004、缩进 2 空格MD007、行宽上限 800 字符且表格不参与计数MD013、标题前后需空行MD022、允许重复标题MD024、允许内联 HTMLMD033——最后一条正是锚点a name能合法存在的原因。校验与构建命令package.json 提供validate-markdownoai-spec-validate-markdown、format-markdownoai-spec-format-markdown、buildoai-spec-build、testoai-spec-test等脚本规范改动的合规性检查与构建发布被纳入统一命令链。发布期转换根目录 spec.config.json 的release段说明发布时会从src/oas.md生成版本文件并对src/schemas/validation/*.yaml、tests/schema/pass、tests/schema/fail等路径做 schema 版本号重写schemaVersionRewrite。也就是说Markdown 结构约定只是 OAS 发布链路的一环与之配套的还有 schema 与示例的版本同步。七、如何本地查看与验证这套管道查看转换产物fixtures下的.html文件是可直接打开的期望输出tests/md2html/README.md还说明若要以 respec 格式在本地浏览器渲染这些 HTML可执行mkdir js cp ../../node_modules/respec/builds/respec-w3c.js js/ echo * js/.gitignore然后本地打开即可仓库是只读的这一步骤只涉及本地查看。运行测试在仓库根目录执行yarn test内部调用oai-spec-testmd2html.test.mjs会遍历 fixtures 中所有.md文件并与.html基线比对任何与本文所述结构约定的偏差都会在此暴露。学习完整模板阅读tests/md2html/fixtures/basic-new.md新格式与versions/3.1.1.md、versions/3.2.1.md等真实版本正文可以同时获得缩微模板与完整成品两个视角是编写或审查 OAS 规范文档的首选参考资料。结语tests/md2html/fixtures/basic-old.md虽小却是理解 OpenAPI-Specification 仓库文档即代码、代码即规范理念的最佳切入点标题层级决定章节语义Version头决定 conformance 章节手写 TOC 会被丢弃锚点与修订历史表格有固定的转换路径而这一切都被 md2html.test.mjs 与配套的 HTML 基线牢牢锁定。对任何参与 OAS 规范维护或希望自建Markdown 规范文档 → respec HTML管道的团队这套约定与测试模式都值得直接借鉴。赞分享API设计文档后端【免费下载链接】OpenAPI-SpecificationThe OpenAPI Specification Repository项目地址https://gitcode.com/gh_mirrors/op/OpenAPI-Specification点击查看免费下载相关推荐OpenAPI Specification 文档发布管线剖析md2html 测试夹具与 Respec 渲染机制OpenAPI Specification 文档发布管线剖析md2html 测试夹具与 Respec 渲染机制 本文以 tests/md2html/fixtuAPI设计文档后端OpenAPI SpecificationSwagger 2.0规范全解文档结构、对象定义与机器可读 Schema 验证OpenAPI SpecificationSwagger 2.0规范全解文档结构、对象定义与机器可读 Schema 验证 本篇技术指南以本仓库 versiAPI设计文档后端拯救混乱的API文档OpenAPI-Specification规范实战指南拯救混乱的API文档OpenAPI Specification规范实战指南 API文档混乱不堪团队协作效率低下OpenAPI SpecificationAPI设计文档后端上一篇Spyder宏录制开发者效率革命的终极指南下一篇Semantic Kernel如何约束AI输出模板工厂与函数选择行为拆解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表