5 Schema與交付物關係

第五章:Schema 與交付物關係

本章描述 CAP 專案的交付物體系結構,明確協議 Schema 定義檔案在交付物中的核心地位,以及 Schema 版本與協議版本的對應關係。理解交付物之間的層級關係和依賴關係,是協議實現者和社群貢獻者參與專案協作的基礎。

5.1 三類核心交付物

CAP 專案的交付物體系由三類核心交付物組成,從文件到定義到實現形成完整的交付鏈:

交付物類別說明倉庫路徑示例
多語言協議文件包括架構藍圖(Blueprint)和協議技術規範(Specification),以 9 種語言等價發佈,為協議的設計意圖、能力範圍和技術細節提供人類可讀的描述docs/{lang}/blueprint/docs/{lang}/specification/
協議 Schema 定義檔案協議訊息格式的權威定義,以機器可讀和人類可讀的多種格式提供,是 SDK 實現和互操作性測試的基準schema/{version}/
各語言 SDK 實現協議的具體程式語言實現,基於 Schema 定義檔案開發,為不同技術棧的開發者提供開箱即用的協議整合能力sdk/{language}/

三類交付物之間的層級關係:

  • 多語言協議文件處於戰略層和規範層,定義協議「做什麼」和「怎麼做」的頂層設計
  • 協議 Schema 定義檔案處於定義層,將協議規範中的訊息格式轉化為精確的、可機器處理的形式化定義
  • 各語言 SDK 實現處於實現層,基於 Schema 定義檔案將協議能力轉化為可直接呼叫的程式介面

三類交付物的更新遵循自上而下的傳導路徑:協議文件的變更驅動 Schema 定義的更新,Schema 定義的更新驅動 SDK 實現的適配。

5.2 Schema 定義檔案的作用

Schema 定義檔案是 CAP 協議訊息格式的權威定義(Authoritative Definition),在專案交付物體系中承擔以下核心作用:

  • 訊息格式的唯一真相源(Single Source of Truth):Schema 定義檔案精確描述了 CAP 協議中所有訊息類型的欄位名稱、資料類型、必填/可選約束和巢狀結構。當協議文件的文字描述與 Schema 定義存在歧義時,以 Schema 定義為準
  • SDK 實現的開發基準:各語言 SDK 的訊息序列化/反序列化邏輯必須嚴格遵循 Schema 定義。SDK 開發者透過 Schema 定義檔案了解每種訊息的精確結構,確保不同語言的 SDK 實現在訊息格式上完全一致
  • 互操作性測試的校驗基準:不同語言 SDK 之間的互操作性測試以 Schema 定義為校驗標準。一個 SDK 序列化的訊息必須能被另一個 SDK 正確反序列化,Schema 定義檔案是判定「正確」的唯一依據
  • 自動化驗證的基礎:Schema 定義檔案(特別是 schema.json)可被自動化工具直接消費,用於訊息格式的自動校驗、程式碼產生和文件產生,減少人工錯誤

5.3 Schema 版本與協議版本對應關係

每個正式發佈的 CAP 協議版本對應一個 Schema 版本,Schema 檔案存放在以協議版本發佈日期命名的目錄下,確保版本對應關係清晰可追溯。

目錄命名規則:

協議狀態Schema 目錄說明
草案(Draft)schema/draft/開發中的 Schema 定義,可隨時變更,不承諾相容性
正式發佈schema/{YYYY-MM-DD}/以發佈日期命名,如 schema/2025-10-25/,發佈後不可變更(immutable)

版本對應規則:

  • 一對一對應:每個正式發佈的協議版本恰好對應一個 Schema 版本目錄,目錄名稱使用該協議版本的發佈日期
  • 草案共享:所有處於草案階段的 Schema 變更共享 schema/draft/ 目錄,草案階段不區分版本號
  • 不可變性:正式發佈的 Schema 目錄中的檔案在發佈後不再修改。任何 Schema 變更(包括錯誤修正)都透過發佈新版本實現
  • 歷史保留:舊版本的 Schema 目錄永久保留在倉庫中,供歷史參考和向後相容性驗證使用

當前版本對應關係:

協議版本Schema 目錄狀態
draftschema/draft/開發中
2025-10-25schema/2025-10-25/已發佈

5.4 Schema 檔案格式說明

每個 Schema 版本目錄下包含 3 種格式的 Schema 定義檔案,分別面向不同的使用場景和消費者:

格式檔案名用途主要消費者
JSON Schemaschema.json機器可讀的訊息格式定義,用於自動化驗證、程式碼產生和跨語言互操作性校驗自動化工具、CI/CD 流水線、SDK 程式碼產生器
TypeScriptschema.tsTypeScript 類型定義,為 TypeScript/JavaScript 生態提供原生類型支援,用於 TS/JS SDK 開發和 IDE 類型檢查TypeScript/JavaScript SDK 開發者、前端整合開發者
MDXschema.mdx可渲染的文件格式,將 Schema 定義以人類友好的方式呈現,用於文件站點展示和協議學習協議學習者、文件站點、技術評審人員

三種格式的關係:

  • schema.json 是權威格式:當三種格式之間存在差異時,以 schema.json 為準。schema.ts 和 schema.mdx 應與 schema.json 保持語義一致
  • schema.ts 是開發便利格式:schema.ts 將 schema.json 中的類型定義轉化為 TypeScript 原生類型,使 TS/JS 開發者能夠直接在 IDE 中獲得類型提示和編譯時檢查
  • schema.mdx 是展示格式:schema.mdx 將 schema.json 中的結構化定義轉化為可渲染的文件內容,支援在文件站點中以互動式方式瀏覽 Schema 定義

檔案目錄結構示例:

schema/
├── draft/
│   ├── schema.json
│   ├── schema.ts
│   └── schema.mdx
└── 2025-10-25/
    ├── schema.json
    ├── schema.ts
    └── schema.mdx