What are the relative merits of CSV, JSON and XML for a REST API?

We're currently planning a new API for an application and debating the various data formats we should use for interchange. There's a fairly intense discussion going on about the relative merits of CSV, JSON and XML.

Basically, the crux of the argument is whether we should support CSV at all because of the lack of recursion (i.e. having a document which has multiple authors and multiple references would require multiple API calls to obtain all the information).

In the experiences you may have had when working with information from Web APIs and things we can do to make the lives easier for the developers working with our API.


Our decision:

We've decided to provide XML and JSON due to the difficulty in recursion in CSV needing multiple calls for a single logical operation. JSON doesn't have a parser in Qt and Protocol Buffers doesn't seem to have a non-alpha PHP implementation so they are out for the moment too but will probably be supported eventually.

Answers


CSV is right out. JSON is a more compact object notation than XML, so if you're looking for high volumes it has the advantage. XML has wider market penetration (I love that phrase) and is supported by all programming languages and their core frameworks. JSON is getting there (if not already there).

Personally, I like the brackets. I would bet more devs are comfortable with working with xml data than with json.


Advantages:

  • XML - Lots of libraries, Devs are familiar with it, XSLT, Can be easiily Validated by both client and server (XSD, DTD), Hierarchical Data
  • JSON - easily interpreted on client side, compact notation, Hierarchical Data
  • CSV - Opens in Excel(?)

Disadvantages:

  • XML - Bloated, harder to interpret in JavaScript than JSON
  • JSON - If used improperly can pose a security hole (don't use eval), Not all languages have libraries to interpret it.
  • CSV - Does not support hierarchical data, you'd be the only one doing it, it's actually much harder than most devs think to parse valid csv files (CSV values can contain new lines as long as they are between quotes, etc).

Given the above, I wouldn't even bother supporting CSV. The client can generate it from either XML or JSON if it's really needed.


Need Your Help

Es6: ability to call custom methods on set/update/delete of object properties?

javascript node.js ecmascript-harmony

I believe I've read that the upcoming ES6 definition enables calling custom definable methods when an object property is set, updated or deleted. However, I can't find the blogpost anymore to back ...

Display xml data in html5 for android

jquery xml ajax html5

I am developing an app for android in html5 and I need to read a xml file like that:

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.