CSV、JSON 和 XML 对于 REST API 的相对优点是啥?

Posted

技术标签:

【中文标题】CSV、JSON 和 XML 对于 REST API 的相对优点是啥?【英文标题】:What are the relative merits of CSV, JSON and XML for a REST API?CSV、JSON 和 XML 对于 REST API 的相对优点是什么? 【发布时间】:2010-09-13 10:15:46 【问题描述】:

我们目前正在为一个应用程序计划一个新的API,并讨论我们应该用于交换的各种数据格式。关于CSVJSONXML 的相对优点的讨论相当激烈。

基本上,争论的关键是我们是否应该支持CSV,因为缺少递归(即拥有一个包含multiple authorsmultiple references 的文档将需要@987654328 @获取所有information)。

根据您在使用来自 Web APIs 的信息时可能获得的经验,以及我们可以做些什么来让使用我们的 API 的开发人员的生活更轻松。


我们的决定:

我们决定提供XMLJSON,因为CSV 的递归难度需要多次调用以实现单个逻辑操作。 JSONQt 中没有解析器,而 Protocol Buffers 似乎没有 non-alpha php 实现,所以它们暂时也已退出,但最终可能会得到支持。

【问题讨论】:

CSV 的美妙之处在于它的简单性。 CSV 对于严格的表格数据更简单、更高效。试图将其他东西(如本例)硬塞进 CSV 是一场灾难。 【参考方案1】:

优点:

XML - 很多库,开发人员熟悉它,XSLT,可以很容易地被客户端和服务器(XSD,DTD)验证,分层数据 JSON - 易于在客户端解释、紧凑表示法、分层数据 CSV - 在 Excel 中打开 (?)

缺点:

XML - 臃肿,在 javascript 中比 JSON 更难解释 JSON - 如果使用不当会造成安全漏洞(不要使用 eval),并非所有语言都有库来解释它。 CSV - 不支持分层数据,您将是唯一一个这样做的人,实际上解析有效的 csv 文件比大多数开发人员认为的要困难得多(CSV 值可以包含新行,只要它们在引号之间,等等)。

鉴于上述情况,我什至不会费心支持 CSV。如果确实需要,客户端可以从 XML 或 JSON 生成它。

【讨论】:

除非您选择的语言中有 JSON 解析器,否则 CSV 比 JSON 更容易解析。 有适用于各种语言的 JSON 解析器。见底部json.org。【参考方案2】:

CSV 是正确的。 JSON 是一种比 XML 更紧凑的对象表示法,因此如果您正在寻找大量数据,它具有优势。 XML 具有更广泛的市场渗透率(我喜欢这个短语),并且受到所有编程语言及其核心框架的支持。 JSON 正在到达那里(如果还没有的话)。

就个人而言,我喜欢括号。我敢打赌,与使用 json 相比,更多的开发人员更愿意使用 xml 数据。

【讨论】:

【参考方案3】:

XML 有时可能有点重量级。 JSON 相当不错,但它具有良好的语言支持,并且 JSON 数据可以直接转换为许多游戏形式上的原生对象。

【讨论】:

【参考方案4】:

CSV 作为一个复杂的数据模型有很多问题,我不会使用它。 XML 非常灵活且易于编程 - 客户端编写 XML 生成器和解析器不会有任何问题,您甚至可以使用 SAX 提供示例解析器。

您检查过 Google 的网络数据格式吗?它被称为协议缓冲区。不知道它是否对 REST 服务有用,因为它也跳过了整个 HTTP 层。

【讨论】:

【参考方案5】:

我对 JSON 没有任何经验,当您的数据非常表格且结构均匀时,CSV 可以工作。 XML 很快就会变得笨拙,特别是如果您没有自动创建对象绑定的工具。

我也没有尝试过,但Google's Protocol Buffers 看起来非常好,简单的格式,创建与 C++、Java 和 Python 的自动绑定,并实现所创建对象的序列化和反序列化。

【讨论】:

【参考方案6】:

除了what Allain Lalonde already said,CSV 的另一个优点是它往往比 XML 甚至 JSON 更紧凑。因此,如果您的数据是严格表格的,具有完全平坦的层次结构,那么 CSV 可能是一个正确的选择。 CSV 的其他缺点是它可能使用不同的定界符和小数分隔符,这取决于生成它的工具(甚至国家!)。

【讨论】:

以上是关于CSV、JSON 和 XML 对于 REST API 的相对优点是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Java Rest Jersey:发布多种类型的数据(文件和JSON)

Spring 4 mvc REST XML 和 JSON 响应

通过 REST Api 下载 CSV

使用python将Rest Api json结果转换为csv

在 Spring Boot 中自动将 Rest 控制器序列化为 CSV 而不是 JSON

WCF Rest POST 方法接受 JSON 和 XML