Community程式設計與開發github.com

Redocly/redocly-cli

用於 OpenAPI、AsyncAPI、Arazzo 和 Overlay 描述以及 Markdown 文件的 Redocly CLI。當使用者想要對 API 描述進行 lint、bundle、split 或 join,套用裝飾器或覆蓋檔,建置或預覽 API 文件,使用 recheck 對 Markdown 或散文進行 lint,使用 respect 或 Arazzo 測試實際 API,擷取流量或檢查漂移,取得統計資料或評分,產生 TypeScript 用戶端,在 OpenAPI 描述中記錄 MCP 伺服器,推送到 Redocly 平台,複製 Redocly 託管的專案並開啟其 pull request,或尋找規則或外掛應定位的節點類型時使用。

redocly-cli 是什麼?

Redocly CLI 是一個全能的命令列工具,涵蓋 OpenAPI、AsyncAPI、Arazzo 和 Overlay 描述的完整 API 生命週期,包括 lint、bundle、轉換、文件化和測試。它也透過 `recheck` 命令提供 Markdown 文件專案的散文與結構 lint 功能。該工具的核心配置是專案根目錄的 `redocly.yaml` 檔案,用於定義規則集、每個 API 的設定、裝飾器和外掛,使得 CLI 行為完全可自訂。Redocly CLI 支援多種平台(npm、npx、Docker 映像),並提供從 API 作者、CI 交付、API 測試與漂移檢測,到 SDK 產生、Redocly 平台整合以及 Shell 自動補全等一系列命令,使其成為開發者和 AI 代理在處理 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、bundle、轉換、文件化和測試。 它也透過 recheck 對文件專案的 Markdown 進行 lint。 專案根目錄中的 redocly.yaml 是控制核心:每個命令都會讀取它,而規則集、每個 API 的設定、裝飾器和外掛都存放在這裡。

執行之前

請先閱讀 redocly.yaml。它會告訴你:

  • 在 apis 下註冊了哪些 API — 它們的名稱(例如 my-api)可作為命令捷徑:redocly lint my-api。
  • 專案 extends 了哪個規則集以及它覆寫了哪些規則。
  • 哪些裝飾器會在 bundle 時轉換輸出。

不帶 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 專案的本地預覽文件渲染
recheckLint Markdown 結構、散文風格和 Markdoc 標記;--fix 可修復大部分結構性問題文件 Lint
bundle將所有 $ref 解析成一個自包含檔案;套用裝飾器和覆蓋檔CI 與交付
join合併多個 API 描述為一個 [實驗性]CI 與交付
respect根據 Arazzo 描述中定義的 API 測試,對即時 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對 OpenAPI 描述進行 AI 代理就緒度評分 [實驗性]品質報告
generate-client產生型別安全、零相依性的 TypeScript 用戶端 [實驗性]SDK 產生
eject-generator將內建產生器複製到儲存庫中以便編輯 [實驗性]SDK 產生
check-configLint redocly.yaml 本身Redocly 設定
inspect-node-types顯示指定路徑的節點類型,或列出所有節點及其類型 [實驗性]Redocly 設定
push將 API 描述推送到 Redocly 平台平台
push-status追蹤進行中的推送作業至平台平台
project clone將 Redocly 託管的專案複製為 Git 儲存庫 [早期存取]平台
project pr create為已複製專案的目前分支開啟 pull request [早期存取]平台
project pr status顯示該 pull request 的狀態、審查、檢查和預覽 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 Lint

recheck <paths> 會對指定路徑下的 Markdown 檔案進行結構(markdownlint 規則集)、散文(禁止詞彙、拼寫、標題大小寫、句子長度、可讀性)以及 Markdoc 標記語法的 lint。 預設集放在根目錄的 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 欄位進行 lint。 現有的檔案或資料夾會優先於同名的別名。 有用的標記:--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,而 recheck-config 則涵蓋調整區塊設定。

使用裝飾器進行轉換

裝飾器會在 bundle 時改寫描述 — lint 檢查原始編寫的內容;bundle、build-docs 和 push 會看到裝飾後的輸出。 內建裝飾器包括 remove-x-internal、filter-in / filter-out、info-override、remove-unused-components,以及 *-description-override 系列。 join 會跳過所有裝飾器,因此 join 所需的轉換應先在每個 API 的 bundle 中執行。

當沒有內建裝飾器能完成轉換時,請像 redocly-lint-rules 技能撰寫外掛規則一樣,撰寫一個自訂外掛裝飾器:從 redocly inspect-node-types 取得節點類型,透過將訪問器嵌套在父類型下來限定範圍(而非手動遍歷文件),在鉤子中修改節點,並使用具有該形狀和不具有該形狀的測試檔案,透過 redocly bundle 來驗證。

套用覆蓋檔

bundle 會在裝飾器之前,將 Overlay 1.0、1.1 和 1.2 檔案套用到 bundle 後的描述:傳遞 --overlay <file>(可重複使用,依照順序套用),或將它們列在 apis 條目的 overlays 下,路徑相對於 redocly.yaml。 --overlay 會取代已設定的列表。 動作目標針對 bundle 後的輸出進行檢查,因此請對照沒有覆蓋檔的 redocly bundle <api> 來檢查它們;如果目標沒有匹配任何內容,則不會有任何變更也不會被報告。 覆蓋檔值中的檔案 $ref 是相對於覆蓋檔的,並且會被 bundle;諸如 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; SDK: 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 無需 Token 即可運作。 平台會拒絕推送到預設分支的動作:請推送到其他分支,然後為其建立 pull request:

git push -u origin fix-typo
redocly project pr create --title "修正一個筆誤" --body-file - <<'BODY'
修復快速入門中的安裝命令。
BODY

該命令會顯示 pull request URL。 平台會在幾分鐘內建立一個預覽;redocly project pr status 隨後會顯示狀態、審查決定、檢查項目,以及在預覽部署完成後的預覽 URL。

測試實際 API

respect 將 Arazzo 描述作為測試套件對執行的 API 執行,斷言實際回應與描述相符。 從 generate-arazzo <openapi> 開始來建立工作流程的骨架,然後手動改寫步驟和成功條件。 如果步驟省略了 parameters 或 requestBody,則會從描述的範例中取得它們。

Individual skills in this repo

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

相關技能