Community编程与开发github.com

Redocly/redocly-cli

Redocly CLI 用于处理 OpenAPI、AsyncAPI、Arazzo 和 Overlay 描述以及 Markdown 文档。当用户想要 lint、打包、拆分或合并 API 描述,应用装饰器或覆盖层,构建或预览 API 文档,使用 recheck 检查 Markdown,使用 respect 或 Arazzo 测试实时 API,捕获流量或检查漂移,获取统计或评分,生成 TypeScript 客户端,在 OpenAPI 描述中记录 MCP 服务器,推送到 Redocly 平台,克隆 Redocly 托管的项目并打开其拉取请求,或查找规则或插件应针对的节点类型时使用。

redocly-cli 是什么?

Redocly CLI 是一个全面的命令行工具,涵盖整个 API 生命周期,支持 OpenAPI、AsyncAPI、Arazzo、Overlay 描述格式,并提供丰富的功能集。它包括用于 API 创作的 lint、split 和 introspect-mcp 命令;用于文档渲染的 build-docs 和 preview;用于 CI 和交付的 bundle 和 join;用于 API 测试和漂移检测的 respect、generate-arazzo、proxy、drift 和 generate-spec;用于质量报告的 stats 和 score;用于 SDK 生成的 generate-client 等。该工具还支持通过内置规则、可配置规则和自定义插件进行扩展,能够通过 recheck 检查 Markdown,并直接与 Redocly 平台集成以进行项目克隆和拉取请求管理。其核心配置位于项目根目录的 `redocly.yaml` 文件中,该文件控制规则集、特定 API 设置、装饰器和插件。

兼容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Redocly/redocly-cli/tree/HEAD/.claude/skills/redocly-cli

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Redocly CLI 使用指南

查阅 redocly.com/docs/cli 获取最新的命令和选项——优先于训练数据。

Redocly CLI 涵盖 OpenAPI、AsyncAPI、Arazzo 和 Overlay 描述的 API 生命周期:lint、打包、转换、文档化和测试。 它还使用 recheck 检查文档项目的 Markdown。 项目根目录中的 redocly.yaml 是控制平面:每个命令都会读取它,并且规则集、特定 API 设置、装饰器和插件都位于其中。

运行之前

首先读取 redocly.yaml。它会告诉你:

  • apis 下注册了哪些 API——它们的名称(如 my-api)可作为命令快捷方式:redocly lint my-api。
  • 项目 extends 了哪个规则集以及它覆盖了哪些规则。
  • 哪些装饰器在打包时转换输出。

不带 API 参数运行的命令(如 lint 或 bundle)适用于 apis 中的每个条目。 使用 --config <path> 指向不同的配置文件。

快速参考

安装:npm i @redocly/cli@latest,或无需安装直接运行:npx @redocly/cli@latest <command>。Docker 镜像:redocly/cli。

命令用途分组
lint根据配置的规则验证 API 描述API 创作
split将单个文件描述拆分为多文件结构API 创作
introspect-mcp在 x-mcp 中记录实时 MCP 服务器的工具、提示和资源 [实验性]API 创作
build-docs将 OpenAPI、AsyncAPI 或 GraphQL 描述渲染为 HTML 页面 (Redoc)文档渲染
previewRedocly 项目的本地预览文档渲染
recheck检查 Markdown 结构、文风和组织标签;--fix 可修复大多数结构性问题文档检查
bundle将所有 $ref 解析到一个自包含文件中;应用装饰器和覆盖层CI 与交付
join将多个 API 描述合并为一个 [实验性]CI 与交付
respect针对实时 API 运行 Arazzo 描述中描述的 API 测试API 测试与漂移
generate-arazzo根据 OpenAPI 描述生成一个 Arazzo 描述API 测试与漂移
proxy将实时 HTTP 流量捕获到 HAR 文件中,可选验证 [实验性]API 测试与漂移
drift报告记录的流量与 OpenAPI 描述之间的差异,可选 --coverage [实验性]API 测试与漂移
generate-spec从记录的流量推断 OpenAPI 3.2 描述;--openapi-version 3.1 目标为 3.1 [实验性]API 测试与漂移
stats统计操作、模式、引用和其他指标质量报告
score根据 AI 代理准备情况对 OpenAPI 描述评分 [实验性]质量报告
generate-client生成类型化、零依赖的 TypeScript 客户端 [实验性]SDK 生成
eject-generator将内置生成器复制到仓库中进行编辑 [实验性]SDK 生成
check-config检查 redocly.yaml 本身Redocly 配置
inspect-node-types显示指针处的节点类型,或列出所有节点及其类型 [实验性]Redocly 配置
push将 API 描述推送到 Redocly 平台平台
push-status跟踪正在进行的推送至平台的状态平台
project clone将 Redocly 托管的项目克隆为 Git 仓库 [早期访问]平台
project pr create为克隆项目的当前分支打开拉取请求 [早期访问]平台
project pr status显示该拉取请求的状态、审查、检查项和预览 URL [早期访问]平台
skills将 Redocly CLI 代理技能安装到 .agents/skills/ 和检测到的代理文件夹中代理设置
completion生成 Shell 自动补全命令Shell 设置

退出码:0 成功,1 发现问题或执行失败,2 配置错误。

使用 redocly.yaml 进行配置

extends:
  - recommended # 或者:minimal, recommended-strict, spec

apis:
  my-api:
    root: ./openapi/openapi.yaml
    rules:
      no-ambiguous-paths: error # 特定 API 覆盖
    decorators:
      remove-x-internal: on # 仅适用于此 API

rules:
  info-license: off
  operation-operationId: error

extends 设置基础规则集;稍后同一文件中的 rules、preprocessors 和 decorators 会覆盖它。 规则严重级别:error(验证失败)、warn(报告但仍有效)、off。

可配置规则

当治理需求没有内置规则时,在 redocly.yaml 中的 rule/<name> 下声明一个。 使用 redocly-lint-rules 技能来实现此目的:它会选择最底层的梯级(内置规则、可配置规则或自定义插件),从 redocly inspect-node-types 获取节点类型,并针对夹具验证规则。

使用 recheck 检查 Markdown

recheck <paths> 检查给定路径下的 Markdown 文件的结构(markdownlint 规则集)、文风(禁止术语、拼写、标题大小写、句子长度、可读性)和 Markdoc 标签语法。 预设放在根 extends 中,调整放在 recheck 块中;lint 命令会忽略这两者:

extends:
  - recommended
  - recheck/markdown # 每条 markdownlint 规则;另有 recheck/prose, recheck/markdoc, recheck/google, recheck/microsoft
recheck:
  excludes: [CHANGELOG.md]
  rules:
    recheck/line-length: off
    acme/no-via:
      severity: warn
      scope: sentence
      message: '请使用“通过”代替“经由”。'
      assertions:
        pattern: { ignoreCase: true, tokens: ['\bvia\b'] }

没有 redocly.yaml 时,该命令使用 recheck/markdown。 如果有 redocly.yaml 但既没有预设也没有块,则它什么也不检查。 对于作为 API 描述的路径,或来自 apis 的别名,该命令会检查该 API 的 description 字段。 现有文件或文件夹的优先级高于同名的别名。 有用的标志:--fix、--rule=<name>(一次处理一条规则)、--format=github-actions|json|sarif、--max-problems=<n>、--generate-baseline(将现有错误记录在 .redocly.recheck-baseline.yaml 中,仅新错误才失败),以及 --readability(获取每个文件的可读性分数)。 使用 <!-- recheck-disable-next-line <rule> --> 静默单行,而不是关闭规则。 recheck-lint 技能涵盖在更改过的文件上运行它,recheck-config 技能涵盖调整该块。

使用装饰器进行转换

装饰器在打包时重写描述——lint 检查源代码的原样;bundle、build-docs 和 push 看到的是装饰后的输出。 内置装饰器包括 remove-x-internal、filter-in / filter-out、info-override、remove-unused-components 以及 *-description-override 系列。 join 会跳过所有装饰器,因此连接所需的转换需要先在每个 API 的 bundle 中运行。

当没有内置装饰器能满足转换需求时,按照 redocly-lint-rules 技能编写插件规则的方式编写一个自定义插件装饰器:从 redocly inspect-node-types 获取节点类型,通过将访问者嵌套在父类型下来限定其作用域(而不是手动遍历整个文档),在钩子中更改节点,并通过 redocly bundle 在一个包含该形状的夹具和一个不包含该形状的夹具上进行验证。

应用覆盖层

bundle 在打包的描述上应用 Overlay 1.0、1.1 和 1.2 文件,在装饰器之前:传递 --overlay <file>(可重复,按顺序应用),或者将它们列在 apis 条目下的 overlays 中,路径相对于 redocly.yaml。 --overlay 会替换已配置的列表。 操作目标针对打包后的输出运行,因此请对照没有覆盖层的 redocly bundle <api> 进行检查;不匹配任何内容的目标不会更改任何内容,也不会报告。 覆盖层值中的文件 $ref 相对于覆盖层文件,并且会被打包;装饰器(如 remove-x-internal)会看到覆盖层的更改。 两个具有相同 root 但不同 overlays 和 output 的 apis 条目会发布一个 API 的两个版本。

使用自定义插件进行扩展

当可配置规则和内置装饰器无法表达需求时,升级为自定义插件:一个导出规则、装饰器、预处理程序或配置的 JavaScript 模块,按文档格式键控:

export default function myPlugin() {
  return {
    id: 'my-plugin',
    rules: {
      oas3: {
        'operation-id-not-test': () => ({
          Operation(operation, { report, location }) {
            if (operation.operationId === 'test') {
              report({ message: 'operationId 不能为 "test"。', location });
            }
          },
        }),
      },
    },
  };
}

访问者键是节点类型:使用 redocly inspect-node-types <api> 确认它们。 装饰器在 decorators 键下具有相同的形状,redocly-lint-rules 技能涵盖了这两者的访问者模式:钩子、上下文、用于范围的嵌套访问者以及已解析与原始子项。 在 redocly.yaml 中注册它(路径相对于配置文件),并将其规则引用为 <plugin-id>/<rule-name>:

plugins:
  - ./plugins/my-plugin.js
rules:
  my-plugin/operation-id-not-test: error

生成 TypeScript 客户端

generate-client <api> --output client.ts 将 OpenAPI 描述转换为类型化客户端——一个自包含文件,具有零运行时依赖项(包含认证、重试、中间件、类型化 SSE、分页)。 在 redocly.yaml 中的 client 块下进行持久化配置,而不是使用标志:

client:
  generators: [typescript, zod] # 附加项:tanstack-query, swr, mock, transformers;SDKs:python, go, php, java;或插件路径
  outputMode: split
  pagination: # 仅配置,无 CLI 标志
    style: cursor
    cursorParam: after
    nextCursor: /page/endCursor
    items: /items
apis:
  my-api:
    root: ./openapi/openapi.yaml
    clientOutput: ./src/api/client.ts

设置 apis.<name>.clientOutput 后,仅运行 redocly generate-client 会为每个已选择的 API 生成客户端。 成功运行后,--report <file> 还会写入一个 JSON 文件,其中包含每个 API 的操作(id、name)和运行的警告,每个警告都有一个稳定的 kind。 client.telemetry: on(仅配置)使 typescript 生成器还写入 <output>.telemetry.ts(注册 use(telemetry({ sdkName, sdkVersion, client }))),而 go、python 和 php 生成器分别写入 telemetry.go、<module>_telemetry.py 和 <output>.telemetry.php,以计算每次操作的调用次数并每分钟发送一次计数(无请求数据;REDOCLY_SDK_TELEMETRY=off 或 DO_NOT_TRACK=1 禁用发送)。 API 自身的 client 块会整体替换顶层块——在其中重复共享字段。 使用 client.codeSamples: true 时,它还会写入 <output>.code-samples.yaml,这是一个添加 x-codeSamples 的覆盖层;将其添加到 API 的 overlays 中(或传递 --overlay),以便 bundle 将示例放入描述中。

在 Redocly 托管的项目上工作

redocly login 之后,project clone <organization>/<project> 会克隆 Redocly 平台托管的项目。 克隆使用 Redocly CLI 作为其 Git 凭据助手,因此 git pull 和 git push 无需令牌即可工作。 平台拒绝推送到默认分支:推送另一个分支,然后为其打开拉取请求:

git push -u origin fix-typo
redocly project pr create --title "修复了一个拼写错误" --body-file - <<'BODY'
修复了快速入门中的安装命令。
BODY

该命令将打印拉取请求 URL。 平台会在几分钟内构建一个预览;redocly project pr status 随后会显示状态、审查决定、检查项以及部署预览后的预览 URL。

测试实时 API

respect 将 Arazzo 描述作为测试套件针对正在运行的 API 执行,断言实际响应与描述匹配。 从 generate-arazzo <openapi> 开始以搭建工作流,然后手动细化步骤和成功标准。 步骤中遗漏的 parameters 或 requestBody 会从描述的示例中获取。

捕获流量并检查漂移

proxy 命令在 --port 上设置一个捕获代理,向 --target 转发请求。

... [为简洁起见省略]

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相关技能