Каковы относительные преимущества CSV, JSON и XML для REST API?

StackOverflow https://stackoverflow.com/questions/138929

  •  02-07-2019
  •  | 
  •  

Вопрос

Сейчас мы планируем новый 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 реализации, поэтому на данный момент они тоже отсутствуют, но, вероятно, со временем будут поддерживаться.

Это было полезно?

Решение

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

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

Другие советы

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

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

Недостатки:

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top