合約改了哪裡?先看分類,再回來源。SCHEMA STUDY / 12
讓 schema 的改動,有脈絡可查。
比較兩份 GraphQL SDL,並排看相容性分類與型別引用。只做靜態結構分析,不連線 API、不執行 resolver,也不替既有查詢宣告安全。
01 / 放進這一次改動
BEFORE → AFTER人工合成範例供核對,不是外部服務或真實客戶 schema。
每側最多 100,000 UTF-16 字碼單元、10,000 tokens、64 types(含 extensions)、500 members、1,000 直接引用;nesting 24、AST depth 64/nodes 6,000、interface depth 16。合計最多 1,000 changes,超限整份拒絕,不當成完整的截斷報告。
02 / 分類,不省略不確定性
Output 回傳保證
String → String!:non-breaking;String! →
String:breaking。
Input 可接受範圍
String → String!:breaking;反向 non-breaking。新增
required input/argument 需考慮 default。
既有 nullable input 改 NonNull,即使同時加 default,固定分類器仍列 breaking。既有 default 新增為 non-breaking,改動/移除為 dangerous。optional input/argument 新增保守列 dangerous。List/NonNull wrappers 依位置遞迴比較,非單看驚嘆號。
這份報告涵蓋什麼,沒有證明什麼
Complete 只代表此靜態子集的分類/來源覆蓋,不等於 operational compatibility。自訂 directive applications 即使未變也 unknown;custom scalar、resolver、client usage、授權、資料與執行效果不在此分析內。GraphQL 座標不是 JSON Pointer;引用是直接關係,不是傳遞影響樹。
03 / 從變更,走回實際定義
分類 ≠ 確定目標 ≠ 執行影響04 / 逐側型別與欄位導覽
歸屬不明,仍可獨立查看座標05 / 帶走刻意縮減的報告
僅匯出核心 exportSdlComparison() 的明確投影:狀態、分類/codes/IDs、mapping、座標位置/名稱、直接引用、scope/limits。不含原始 SDL、signature、reason、description、default/directive arguments 或錯誤原文。名稱與座標仍可能敏感,這不是匿名化。
用靜態證據,開始下一步審查。
免登入。SDL 只在目前頁面的記憶體中處理,不上傳、不連線 endpoint、不永久保存、不放入 query/hash/分享 URL。編輯、清除、重整或離開會丟棄舊結果。只有你主動下載才產生本機檔案;分享前請檢查。
分類使用固定 [email protected]。Breaking 表示這份靜態規則下的結構不相容;dangerous 需要人工審查;non-breaking 也不是服務或查詢安全保證;unknown 可能來自 directive 或無法確認變更歸屬,報告狀態與 unknown 計數需分開看。候選/無對應不得當成確定來源,reason 僅為文字說明,不用它猜連結。