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

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

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

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


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

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.

Красота CSV в его простоте.

Ambo100 17.10.2016 22:28

CSV проще и эффективнее для строго табличных данных. Попытка втиснуть что-то еще (как в этом случае) в CSV - катастрофа.

Clay Bridges 16.07.2018 18:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
24
2
22 834
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

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

Лично мне кронштейны нравятся. Я готов поспорить, что большему количеству разработчиков удобнее работать с xml-данными, чем с json.

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

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

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

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

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

Недостатки:

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

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

Если у вас нет парсера JSON на выбранном вами языке, тогда CSV намного проще анализировать, чем JSON.

Mike McQuaid 26.09.2008 16:00

Есть парсеры JSON, доступные для очень широкого диапазона языков. См. Нижнюю часть json.org.

mpdaly 26.09.2008 17:17

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

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

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

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