简体中文

开发者工具 · 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 过时。仅当定义的映射保留所需信息时才使用跨格式转换。对历史同样要小心:关于单一转折点或完全替代的不受支持的主张被忽略或纠正,留下可以辩护的机制和当前行为。