news 2026/10/15 15:21:59

深度解析 Cloudflare 开源的 Forge:一份 OpenAPI 规范同时生成 cf CLI、多语言 SDK 与 API 文档

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度解析 Cloudflare 开源的 Forge:一份 OpenAPI 规范同时生成 cf CLI、多语言 SDK 与 API 文档

【免费下载链接】forge

项目地址:https://gitcode.com/gh_mirrors/forge55/forge
点击查看免费下载

Forge是 Cloudflare 开源的一套 schema-first 的 OpenAPI 代码生成与"接口面"(surface)工具框架:只要维护一份 OpenAPI 3.x 规范,它就能同时产出cf CLI、多语言 SDK(TypeScript、Go、Python 等)以及面向人类和 AI 的 API 文档。这套框架采用插件化架构,核心引擎位于 packages/forge/,文档引擎位于 packages/astro-fern/。

为什么需要 Forge?

API 生态中最常见的痛点是"多份产物各说各话":CLI 的参数、SDK 的方法签名、文档里的示例,往往由三套人马分别维护,时间一长必然漂移。

Forge 的思路是单一事实源:

  • OpenAPI 规范描述"这个 API 长什么样";
  • JSONPath 风格的Overlay负责在不污染上游规范的前提下,注入 CLI/SDK 专属的元数据(参数别名、确认提示、命令分组等);
  • 各个"transformer"(转换器)插件读取同一份解析后的模型,分别输出 CLI、SDK 和文档。

换句话说,改一处规范,所有产物同步更新。

项目结构与包职责

仓库是一个 pnpm monorepo,各包分工非常清晰(架构说明见 AGENTS.md):

包职责
packages/forge/核心引擎:OpenAPI 3.x 解析器、类型化 Schema 模型、JSONPath Overlay、插件生命周期
packages/astro-fern/通用的 Astro 文档引擎:加载 OpenAPI、构建目录、规划路由、渲染 Markdown
packages/docs-site/可直接部署的 API 文档站(Astro + Starlight + astro-fern)
packages/fern-forge/把 Forge 的x-forge-*元数据校验并适配进 astro-fern 扩展 API
packages/cloudflare-fern-config/Fern 生成器配置(generators.yml)与多语言 SDK 生成脚本
packages/cloudflare-forge-sdk-ts/TypeScript SDK 封装与sdk-map生成器
packages/cloudflare-forge-sdk-go/ 等Go、Python、Java、PHP、C#、Ruby、Rust、Swift 的语言工作区封装

⚠️ 一个值得注意的架构约定:通用包(forge、astro-fern)不依赖任何 Cloudflare 专属内容,所有 Cloudflare 专属配置都放在cloudflare-*前缀的包里。这意味着你可以把 Forge 拿去为自己的 API 服务。

核心工作流:从规范到产物

1. 初始化:init()与 Overlay 解析

生成入口是异步工厂函数init()(见 init.ts):

import { init } from '@cloudflare/forge'; const forge = await init(openapi, overlays);

它会依次完成:解析 OpenAPI 文档 → 按名称排序并逐个应用 Overlay → 构建类型化的命令/方法模型。Overlay 遵循 OpenAPI Overlay Specification v1.0.0,通过actions数组精确地"打补丁"——比如给某个操作注入x-forge-args(CLI 参数定义)或x-forge-require-confirmation(危险操作确认提示)。类型定义见 overlay-types.ts。

2. 插件化的 Transformer 模型

Forge类是所有生成器的宿主(核心实现见 forge.ts)。一个 transformer 就是一个简单的函数:

type TransformerFn = (forge: Forge) => Promise<void>;

transformer 内部通过forge.emit(path, content)缓冲文件,forge.transform(fn)执行后返回全部SourceFile,最后forge.finalize()把文件写到磁盘(并可选清理输出目录)。

同一个Forge实例可以反复用于不同 transformer——这正是"一份规范、多种产物"的机制保证。此外,Forge还内置了operationId索引、重复 ID 检测、$ref解析、按状态码匹配响应(精确码 →2XX/4XX区间 →default)等实用查询接口,详见 forge.ts。

三大产物详解

1️⃣ cf CLI:当前最优先的输出

README 明确写道,Forge 当前"激光聚焦"的第一个输出就是cf CLI。CLI 元数据通过x-forge-commands根字段声明命令树:命令名 → 描述 → 方法列表(每个方法绑定一个operationId+ SDK 方法名 + 可用性状态)。相关 schema 定义在 schema/schema.ts 与 overlay-types.ts。

命令树的目录与统计可以直接由引擎计算:methodMap()生成层级化的方法树,methodStats()统计方法分布(见 forge.ts)。

2️⃣ 多语言 SDK:基于 Fern 生成器

SDK 生成复用了 Fern 生态。共享的规范与生成器配置放在 cloudflare-fern-config/fern/generators.yml,一条脚本命令即可按语言生成:

tsx scripts/generate-sdk.ts # 默认 TypeScript tsx scripts/generate-sdk.ts python go rust # 任意语言组合

脚本 generate-sdk.ts 在本地与 CI 执行完全相同的流程:解析规范 → 调用 Fern 生成器 → 叠加自定义 runtime。TypeScript SDK 还额外生成sdk-map.json(operationId → SDK 调用点映射),保证文档示例与 SDK 实际调用点永不漂移,逻辑在 generate-fern.ts。

3️⃣ API 文档:人类页面 + AI 的llms.txt

文档侧由两个包协作:

  • astro-fern(README):负责加载 OpenAPI、构建 catalog、规划路由、输出操作产物(operation artifacts)。它还内置agent 文档能力——为每个操作自动注入 Markdown 页面和多级llms.txt索引(站点级、产品级、快照级、target 级),让 LLM Agent 也能高效检索 API 内容。
  • docs-site(README):Cloudflare 实际部署的 API 参考站,基于 Astro + Starlight 渲染,支持?lang=typescript选择执行目标、?version=切换历史版本快照。

数据流向非常直观(摘自 docs-site/README.md):

OpenAPI source or version-bound snapshots + manifest ↓ route-neutral apiReference + runtime routing ↓ astro-fern server composition / | \ Starlight 页面 | agent Markdown 和 llms.txt | target metadata

而 fern-forge 则是桥梁:它校验x-forge-*/x-fern-*扩展字段、把 SDK 分组投影贡献给产品发现,并支持x-forge-aliases——让同一个物理操作以不同产品名出现在 SDK 与文档中。

快速上手

git clone https://gitcode.com/gh_mirrors/forge55/forge cd forge pnpm install

常用命令(见 AGENTS.md):

pnpm check # 格式化 + lint(oxfmt + oxlint) pnpm typecheck # 全量严格类型检查 pnpm test # Node 原生测试运行器 pnpm --filter docs-site dev # 本地跑文档站

环境要求:Node.js ≥ 22、pnpm 10.27。

总结:值得关注的理由

  • 一份规范,全端一致:CLI、SDK、文档共享同一个解析模型,从机制上消除漂移;
  • Overlay 解耦:业务方元数据通过标准 Overlay 注入,上游 API 规范保持干净;
  • 插件化 transformer:新增一种产物(比如 Terraform、Go CLI)只需写一个新 transformer;
  • AI 原生:llms.txt与 Markdown 操作文档是内置能力,而非事后补丁。

项目目前仍处于 early-days 阶段(Apache-2.0 协议),Cloudflare 表示后续会陆续开放 TypeScript、Go、Python、Terraform 等更多 target。如果你的团队也在维护"规范 → 多产物"的流水线,这套设计模式值得直接借鉴。

【免费下载链接】forge

项目地址:https://gitcode.com/gh_mirrors/forge55/forge
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 15:21:42

Ceph RGW从零搭建全攻略:角色定位、配置实践与排障详解

刚开始学Ceph&#xff0c;很多人会把RGW当作一个里程碑去追求。我早期也一样&#xff0c;总想着在集群里加上几个rgw进程&#xff0c;能用S3客户端上传下载文件&#xff0c;就算是把对象存储跑通了。回头看&#xff0c;这种想法太乐观。RGW对外是一套HTTP服务&#xff0c;对内要…

作者头像 李华
网站建设 2026/10/15 15:21:18

天然气阀门选型与进口阀门核心技术解析

1. 天然气阀门选型核心要素解析在天然气输配系统中&#xff0c;阀门如同人体的"心脏瓣膜"&#xff0c;控制着介质流动的方向、压力和流量。2026年最新行业数据显示&#xff0c;全球天然气阀门市场规模已达187亿美元&#xff0c;其中进口阀门在高压、超低温等特殊工况…

作者头像 李华
网站建设 2026/10/15 15:20:32

Netty版Jt808协议解析:车载终端报文处理与网关实现

简介&#xff1a;面向车联网终端与平台通信场景&#xff0c;提供一套基于Java Netty的JT/T808协议解析工程&#xff0c;适合需要对接部标808协议的嵌入式开发、后端服务开发者使用。工程完全参照部标文档实现&#xff0c;覆盖TCP长连接、消息编解码、分包粘包处理等关键环节&am…

作者头像 李华
网站建设 2026/10/15 15:20:31

LDTP实战:利用AT-SPI可访问性总线实现Linux桌面GUI自动化

1. 为什么Linux桌面自动化总在翻车&#xff0c;而LDTP换了一条路走1.1 像素比对和坐标点击这两条老路&#xff0c;我都被坑过先说一段我自己的经历。早几年在一个工控相关的测试项目里&#xff0c;被测软件跑在精简版Linux桌面上&#xff0c;横跨两套显卡驱动、三档分辨率和中英…

作者头像 李华
网站建设 2026/10/15 15:20:30

嵌入式C语言UTF-8转GBK零依赖实现

简介&#xff1a;本资源是一个轻量级C语言实现的UTF-8到GBK编码转换工具&#xff0c;专为嵌入式开发尤其是单片机场景设计&#xff0c;解决资源受限设备中中文字符正确显示与跨编码数据交换的核心难题。压缩包共2个文件&#xff08;1个C源码文件、1个头文件&#xff09;&#x…

作者头像 李华
网站建设 2026/10/15 15:20:09

SAP GUI 770部署与兼容性深度指南

简介&#xff1a;本资源为SAP GUI 770最新版Windows客户端完整安装包&#xff0c;面向SAP系统管理员、ABAP开发人员、企业ERP实施顾问及SAP初学者&#xff0c;解决日常连接与操作SAP R/3、S/4HANA等系统时对高兼容性、高性能图形界面客户端的迫切需求。压缩包共2616个文件&…

作者头像 李华