Каковы относительные достоинства CSV, JSON и XML для REST API? - PullRequest
23 голосов
/ 26 сентября 2008

В настоящее время мы планируем новый API для приложения и обсуждаем различные форматы данных, которые мы должны использовать для обмена. Идут довольно интенсивные дискуссии об относительных достоинствах CSV, JSON и XML.

По сути, суть аргумента в том, должны ли мы вообще поддерживать CSV из-за отсутствия рекурсии (, т. Е. Для документа, который имеет multiple authors и multiple references, потребуется multiple API calls чтобы получить все information).

В опыте, который вы могли иметь при работе с информацией из Web APIs, и о том, что мы можем сделать, чтобы облегчить жизнь разработчикам, работающим с API.


Наше решение:

Мы решили предоставить XML и JSON из-за сложности рекурсии в CSV, требующей нескольких вызовов для одной логической операции. JSON не имеет синтаксического анализатора в Qt, а Protocol Buffers, похоже, не имеет реализации non-alpha PHP, поэтому они также отсутствуют, но, вероятно, будут поддерживаться в конечном итоге.

Ответы [ 6 ]

23 голосов
/ 26 сентября 2008

Преимущества:

  • XML - множество библиотек, разработчики знакомы с ним, XSLT, могут быть легко проверены как клиентом, так и сервером (XSD, DTD), иерархические данные
  • JSON - легко интерпретируется на стороне клиента, компактная запись, иерархические данные
  • CSV - Открывается в Excel (?)

Недостатки:

  • XML - раздутый, труднее интерпретировать в JavaScript, чем JSON
  • JSON - При неправильном использовании может создать дыру в безопасности (не используйте eval), Не все языки имеют библиотеки для его интерпретации.
  • CSV - не поддерживает иерархические данные, вы будете единственными, кто делает это, на самом деле гораздо сложнее, чем думает большинство разработчиков, анализировать действительные файлы CSV (значения CSV могут содержать новые строки, если они находятся между кавычками и т. Д. ).

Учитывая вышесказанное, я бы даже не стал поддерживать CSV. Клиент может сгенерировать его из XML или JSON, если это действительно необходимо.

18 голосов
/ 26 сентября 2008

CSV прямо сейчас. JSON - это более компактная нотация объектов, чем XML, поэтому, если вы ищете большие объемы, она имеет преимущество. XML имеет более широкое распространение на рынке (мне нравится эта фраза) и поддерживается всеми языками программирования и их основными структурами. JSON добирается туда (если еще не там).

Лично мне нравятся скобки. Могу поспорить, что разработчикам удобнее работать с XML-данными, чем с JSON.

2 голосов
/ 26 сентября 2008

XML иногда может быть немного тяжелым. JSON довольно хорош, однако, имеет хорошую языковую поддержку, и данные JSON могут быть переведены непосредственно в нативные объекты на многих игровых формах.

2 голосов
/ 26 сентября 2008

CSV имеет так много проблем, как сложная модель данных, что я бы не стал ее использовать. XML очень гибок и прост в программировании - у клиентов не возникнет проблем при кодировании генераторов и анализаторов XML, вы даже можете предоставить примеры анализаторов с использованием SAX.

Вы проверили сетевой формат данных Google? Это называется протокол буфера. Не знаю, полезно ли это для службы REST, поскольку она пропускает и весь уровень HTTP.

1 голос
/ 26 сентября 2008

У меня нет опыта работы с JSON, CSV работает до такой степени, что ваши данные очень табличные и равномерно структурированные. XML может стать громоздким очень быстро, особенно если у вас нет инструмента, который автоматически создает привязки к вашим объектам.

Я тоже не пробовал, но Буферы протокола Google выглядят действительно хорошо, простой формат, создает автоматические привязки к C ++, Java и Python и реализует сериализацию и десериализацию созданных объектов.

0 голосов
/ 09 августа 2017

Помимо того, что уже сказал Аллен Лалонд , еще одним преимуществом CSV является то, что он имеет тенденцию быть более компактным, чем XML или даже JSON. Таким образом, если ваши данные строго в табличной форме с абсолютно плоской иерархией, CSV может быть правильным выбором. Дополнительные недостатки CSV заключаются в том, что он может использовать разные разделители и десятичные разделители, в зависимости от того, какой инструмент (и даже страна!) Его сгенерировал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...