繁體中文

開發者工具 · JSON 格式化程式和驗證程序

JSON 如何取代 XML 作為 Web API 的預設格式

· 背景

json 標準 驗證

JSON 如何取代 XML 作為 Web API 的預設格式,並使用 JSON 令牌和精確的驗證邊界進行說明
原始 ToolAcre 向量圖

二十年前 XML 是系統之間發送的任何內容的假定格式。這篇文章追蹤了 JSON 如何在 Web API 中取代它、每種格式的設計目的以及為什麼 XML 仍然主導著某些領域。

還剩一個 SOAP 端點

還剩下一個 SOAP 端點 — 一種在程式碼庫中使用 XML 的集成,而其他所有內容都使用 JSON ,以及我們如何到達這裡的問題。這種對比經常出現在客戶端程式碼中:一條路徑管理信封、命名空間和產生的類型,而較新的端點透過輕量級 HTTP 庫交換普通物件。這一觀察描述了當地的建築,而不是普遍的年表。

格式化程式僅處理 JSON;跨格式轉換屬於單獨的語法轉換器面板。 JSON 的流行並不會讓 XML 過時,本地漂亮列印也不會驗證 API 合約。本文將歷史採用與此路線上實施的較窄行為區分開來。關於決定性日期、原因或整個市場替代的不受支持的歷史說法被故意省略或糾正,而不是從當前的違約中推斷出來。

XML 的用途

XML 的建置目的 — 具有混合內容、命名空間、模式和轉換管道的檔案。元素可以包含文字和子標記,屬性可以攜帶元資料,命名空間限定的名稱讓詞彙表共存。 XML Schema、XPath 和 XSLT 等技術支援跨以檔案為中心的工作流程的驗證、查詢和轉換。

當有效負載是出版品、簽署的業務檔案或可擴展的產業訊息時,這些功能並不是無緣無故的。它們確實強加了比簡單的物件和陣列交換所需的更多概念。因此,比較等效範例應考慮契約,而不僅僅是字元數: XML 和 JSON 公開不同的建模工具,並兩種語法都不會自動提供正確的領域語義。

瀏覽器本身可以做什麼

瀏覽器本身可以做什麼 — XMLHttpRequest 可以檢索任一文字格式,而瀏覽器提供 XML DOM 解析。早期的 JavaScript 程式碼有時會評估類似 JSON 的文字,當輸入不受信任時,這是一種不安全的做法;標準化的 `JSON.parse` 後來提供了專用的解析器。解析後的 JSON 自然會對應到 JavaScript 陣列、物件、字串、數字、布林值和 null。

這種映射減少了許多瀏覽器應用程式的儀式,但這並不能證明瀏覽器無法處理 XML 或僅由一個 API 決定採用。 XML DOM 保留元素、屬性和命名空間,而不是自動變成普通物件。關於因果關係的歷史主張需要超出實現便利性的來源,因此此處省略或糾正了不受支持的版本。

轉折點 — 公共 Web API 提供 JSON 和 XML,然後僅提供 JSON,並 REST 取代了大多數新服務的 SOAP

轉折點 — 許多公共 Web API 與 XML 一起公開 JSON,並許多後來的服務選擇 JSON 作為其主要表示形式。輕量級 HTTP 樣式對於應用程式 API 也變得很常見,而 SOAP 仍然保留在已建立的生態系統中。確切的市場份額、先行者和日期因來源而異,無法從此格式化程式儲存庫中確定。

因此,不受支持的歷史主張被省略或糾正,而不是轉換成一個整潔的單一原因故事。可防禦的機制是互通性壓力:一旦團隊圍繞某種格式進行標準化,客戶端程式庫、檔案、工具和鄰近服務就會強化該格式。此回饋可以解釋本機預設值,而無需宣告 XML 消失或每個 REST API 使用 JSON。

轉換成本

切換的成本 — JSON 在屬性和子元素之間沒有原生區別,沒有混合內容模型,也沒有註解語法。基本 JSON 語法也沒有定義應用程式模式。需要合約的團隊添加單獨的系統,例如 JSON Schema 或 OpenAPI,每個系統都有自己的詞彙表、工具和版本控制決策。

轉換可能會遺失資訊。重複的 XML 元素可能會變成數組,命名空間限定的名稱需要表示,並與標記交錯的文字並不總是乾淨地變成簡單的物件。更簡單的有效負載語法將一些複雜性轉移到外部契約或約定;它不會使驗證、演進和檔案變得不必要。

XML 仍然獲勝

XML 仍然獲勝-發布工作流程受益於混合內容和既定的文件詞彙表,而 Office 格式則打包 XML 部分來表示豐富的文件。成熟的金融和企業訊息傳遞標準可能依賴命名空間、模式、簽名或長期工具投資。替換語法需要生態系統協調,而不僅僅是更短的範例有效負載。

XML 也很有用。 JSON 可以透過附加約定為這些領域提供服務,就像 XML 可以為普通 API 提供服務一樣,但遷移價值必須超過合約和工具成本。面向瀏覽器的服務的受歡迎程度並不能證明每個表示問題的優越性,並糾正或省略了不受支援的總位移的主張。

這不包括什麼

這不包括 - 二元替代品,例如 Protocol Buffers 和 MessagePack,它們在不同的條款上競爭。它們的線路尺寸、模式要求、流行為和工具需要單獨評估。這也不能比較超媒體約定、傳輸協定或 API 風格; SOAP 與 REST 的比較不僅僅是 XML 與 JSON 的比較,而且任一表示形式都可以透過 HTTP 傳輸。

這也不是 API 採用的定量歷史記錄。關於日期、百分比、首次實施或全行業原因的精確陳述不受列出的存儲庫證據的支持,因此它們被省略或更正。相反,本文解釋了可觀察的格式功能和合理的工程後果,但沒有將這些後果作為完整歷史敘述的證據。

重點:JSON 贏得簡單性,而不是完整性

重點:JSON 透過緊湊的資料模型、主流語言的直接支援和廣泛的周邊工具成為許多 Web API 的常見預設值,而不是因為它包含 XML 提供的所有功能。 XML 在檔案結構、命名空間、轉換或已建立的模式為中心的情況下仍然適用。格式選擇遵循合約和生態系統,而不是通用排名。

ToolAcre 透過在此路徑上解析、驗證和漂亮列印 JSON 來反映 JSON 的窄模型;它不驗證 API 語意或使 XML 過時。僅當定義的映射保留所需資訊時才使用跨格式轉換。對歷史同樣要小心:關於單一轉折點或完全替代的不受支持的主張被忽略或糾正,留下可以辯護的機制和當前行為。