Глубокий взгляд на JSON и XML, часть 1: история каждого стандарта

Опубликовано: 2022-03-11
Связанный: Глубокий взгляд на JSON и XML, часть 2: сильные и слабые стороны обоих

Почти все компьютерные приложения, которые мы используем сегодня, от настольных компьютеров до Интернета и мобильных устройств, основаны на одном из двух основных стандартов сообщений: JSON и XML. Сегодня JSON является наиболее широко используемым форматом, но он обогнал XML только за последние пять лет. Быстрый онлайн-поиск по запросу «JSON vs. XML» выдаст бесчисленное количество статей и постов в блогах, сравнивающих эти два стандарта и приводящих к постоянно расширяющемуся предубеждению, восхваляющему простоту JSON и критикующему многословие XML. Во многих статьях утверждается, что JSON превосходит XML из-за его лаконичной семантики, и отвергают XML как неэффективный и запутанный стандарт прошлого. На первый взгляд, JSON кажется наиболее популярным, так что JSON просто лучше, чем XML? Битва «JSON против XML» может вести к JSON на поверхности, но в глубине есть нечто большее, чем кажется на первый взгляд.

В первой части этой статьи мы:

  1. Познакомьтесь поближе с историей Интернета, чтобы раскрыть первоначальную цель XML и JSON.
  2. Рассмотрим эволюцию тенденций программного обеспечения в последние годы, чтобы понять, почему JSON стал более популярным, чем XML.

История JSON и XML

Чтобы раскрыть причину популярности JSON над XML, давайте рассмотрим историю Интернета и то, как его эволюция от Web 1.0 к Web 2.0 повлияла на тенденции развития.

Интернет 1.0: HTML

Начало 1990-х было рассветом Web 1.0. HTML был представлен в 1991 году и был широко принят университетами, предприятиями и государственными организациями в качестве языка Интернета. HTML произошел от SGML, или «Стандартного обобщенного языка разметки», изобретенного в 1970-х годах компанией IBM. В дополнение к массовому внедрению HTML подвергся массовой адаптации — были встроены расширения для поддержки мультимедиа, анимации, онлайн-приложений, электронной коммерции и многого другого. Как производная от SGML, HTML не имела строгой спецификации, чтобы ограничить компании от свободного расширения его для выполнения требований, выходящих за рамки исходной концепции. Конкуренция за самый популярный веб-браузер между Netscape и Microsoft привела к быстрому прогрессу, но также привела к неустанной фрагментации стандарта. Жестокая конкуренция привела к «катастрофе дивергенции», поскольку расширение HTML двумя компаниями заставило браузеры поддерживать свои собственные уникальные версии HTML. Эта катастрофа расхождения стала огромной проблемой для веб-приложений, поскольку разработчики изо всех сил пытались написать интероперабельный код для браузеров.

Интернет 1.1: XML + HTML = XHTML

В конце 1990-х группа людей, включая Джона Босака, Тима Брея, Джеймса Кларка и других, придумала XML: «расширяемый язык разметки». Как и SGML, XML сам по себе не является языком разметки, а является спецификацией для определения языков разметки. XML был эволюцией SGML и был разработан, чтобы предоставить средства для определения и обеспечения соблюдения структурированного контента. Считающийся «Святым Граалем вычислительной техники» 1 , язык XML стремился «решить проблему универсального обмена данными между разнородными системами» (д-р Чарльз Гольдфарб) 2 . Вместо продолжающейся фрагментации HTML был создан Комитет Всемирной паутины (W3C) для обеспечения совместимости и согласия между отраслью при принятии новых стандартов для Всемирной паутины. 3 W3C приступил к преобразованию HTML в XML-приложение, в результате чего появился XHTML.

XHTML был крупной инициативой, которая привлекла внимание к XML, но это лишь малая часть того, чем является XML.

XML предоставил отрасли возможность определять со строгой семантикой пользовательские языки разметки для любого приложения. С помощью ключевого слова «строгая семантика» XML определил стандарт, который мог гарантировать целостность данных в любом XML-документе любого подъязыка XML. Для компаний-разработчиков программного обеспечения, разрабатывающих распределенные корпоративные приложения, взаимодействующие с разрозненными системами, язык разметки, который мог гарантировать целостность своих данных, имел большое значение. Определяя структурированный контент с помощью XML, компании использовали возможности этой технологии для взаимодействия с любой платформой, обеспечения целостности данных при каждом обмене данными и систематического снижения программного риска своих систем. Для промышленности XML предоставил технологию для хранения, передачи и проверки любых данных в форме, которую приложения на любой платформе могут легко читать и обрабатывать. Для HTML XML обещал решить «катастрофу дивергенции».

Java и .NET

В начале 2000-х Интернетом управляли две компании: Sun и Microsoft. В то время ландшафт языков программирования был сильно смещен в сторону сервера. Общая архитектура веб-приложений основывалась на серверах, обрабатывающих HTML-страницы на серверной части для доставки в браузер. Этот подход выдвинул на первый план серверные технологии, которые, в свою очередь, популяризировали ведущие серверные платформы: Java и C#.NET. Разработанный Sun Microsystems язык Java возглавил новое поколение объектно-ориентированных языков программирования, которые решили межархитектурную проблему благодаря своему новому подходу «написать один раз и запустить где угодно» 4 . Затем Microsoft выпустила .NET, C# и Common Language Runtime (CLR) и обратила внимание на XML как на лучший подход к решению проблемы совместимости данных. Microsoft стала активным сторонником XML, выбрав XML в качестве неотъемлемой части своей известной инициативы .NET. Заявленные как «платформа для веб-сервисов XML», 5 приложений .NET были спроектированы так, чтобы использовать XML для связи с другими платформами. XML, выбранный Microsoft в качестве стандарта обмена данными, был интегрирован во флагманские серверные продукты, такие как SQL Server и Exchange.

Интернет 1.2: AJAX

Доставка предварительно обработанных HTML-страниц в браузер не была масштабируемой, и Интернету требовалась альтернатива. С каждым действием пользователя, требующим загрузки новой страницы с сервера, нагрузка на процесс и потребление полосы пропускания стали проблемой, поскольку все больше людей расширяли сеть.

Netscape и Microsoft попытались решить эту проблему с помощью асинхронной доставки контента: ActiveX и JavaScript. В 1998 году команда Microsoft Outlook Web Access разработала концепцию ActiveX 6 , которая позже была реализована в Mozilla, Safari, Opera и других браузерах в JavaScript как объект XMLHttpRequest .

AJAX родился из ActiveX от Microsoft и JavaScript от Netscape.

Термин AJAX — сокращение от «асинхронный JavaScript и XML» — стал обозначать широкий спектр веб-технологий, которые можно использовать для реализации веб-приложений, взаимодействующих с серверами в фоновом режиме без необходимости перезагрузки страницы. В статье, которая ввела термин AJAX, 7 8 Джесси Джеймс Гарретт изложил основные концепции:

  1. HTML (или XHTML) и CSS для представления.
  2. Объектная модель документа (DOM) для динамического отображения данных и взаимодействия с ними.
  3. XML для обмена данными и XSLT для их обработки.
  4. Объект XMLHttpRequest для асинхронной связи.
  5. JavaScript для объединения этих технологий.

Поскольку асинхронная доставка контента позволила снизить нагрузку на сервер и значительно сэкономить пропускную способность, AJAX изменил правила игры. Введение XMLHttpRequest в браузеры позволило разработчикам реализовать более сложную логику во внешнем интерфейсе. Компания Google широко внедрила совместимый со стандартами кроссбраузерный AJAX в Gmail в 2004 г. и Google Maps в 2005 г.9 А в октябре 2004 г. публичная бета-версия Kayak.com стала одним из первых крупномасштабных применений AJAX в электронной коммерции. 10

Веб 2.0: одностраничные приложения

Принятие AJAX в качестве масштабируемой архитектуры для веб-приложений привело к появлению Web 2.0: одностраничного приложения (SPA). 11 Вместо перезагрузки всей страницы при каждом взаимодействии с пользователем SPA динамически перезаписывают текущую страницу в браузере. В дополнение к значительному снижению нагрузки на сервер и пропускной способности, подход SPA позволил веб-приложениям стать похожими на настольные приложения благодаря беспрепятственному и бесперебойному взаимодействию с пользователем.

В апреле 2002 года Стюарт Моррис написал одно из первых SPA на сайте slashdotslash.com 12 , а позже в том же году Лукас Бердо, Кевин Хакман, Майкл Пичи и Эван Йе описали реализацию одностраничного приложения в патенте США 8,136,109. 13 В патенте описываются веб-браузеры, использующие JavaScript для отображения пользовательского интерфейса, выполнения логики приложения и связи с веб-сервером.

Google Gmail, Google Maps и публичная бета-версия Kayak открыли новую эру в разработке веб-приложений. Браузеры с поддержкой AJAX позволили разработчикам создавать многофункциональные веб-приложения. Простая семантика JavaScript сделала разработку приложений доступной для программистов любого уровня. Барьер для входа в разработку программного обеспечения был значительно снижен, и отдельные разработчики по всему миру начали вносить свой вклад в разработку собственных библиотек и фреймворков. Популярные библиотеки, такие как jQuery, которые нормализуют поведение AJAX в браузерах разных производителей, еще больше продвинули революцию AJAX.

Расцвет JSON

В апреле 2001 года Дуглас Крокфорд и Чип Морнингстар отправили первое сообщение JSON с компьютера в гараже Morningstar Bay Area. Крокфорд и Морнингстар пытались создавать приложения AJAX задолго до того, как был придуман термин «AJAX», но поддержка браузерами того, чего они пытались добиться, была не очень хорошей. Они хотели передать данные в свое приложение после загрузки страницы, но не нашли способ, чтобы это работало во всех браузерах.

В 2001 году разработка AJAX только начиналась, а интероперабельной формы объекта XMLHttpRequest в Internet Explorer 5 и Netscape 4 еще не было. Поэтому Крокфорд и Морнингстар использовали другой подход, который работал в обоих браузерах.

Первое сообщение JSON выглядело так:

 <html><head><script> document.domain = 'fudco'; parent.session.receive( { to: "session," do: "test," text: "Hello world" } ) </script></head></html>

Это сообщение на самом деле представляет собой HTML-документ, содержащий немного JavaScript, и лишь небольшая часть сообщения напоминает JSON, каким мы его знаем сегодня. Крокфорд и Морнингстар смогли загружать данные асинхронно, указав <iframe> на URL-адрес, который возвращал HTML-документ, подобный приведенному выше. Когда ответ будет получен, JavaScript в HTML будет запущен, и, обойдя защиту браузера, предотвращающую доступ подокна к родителю, литерал объекта будет передан обратно в основной фрейм приложения. Этот основанный на фреймах метод, иногда называемый «методом скрытого фрейма», широко использовался в конце 90-х, до широко распространенной реализации XMLHttpRequest . 14

Этот подход понравился разработчикам, потому что он обеспечивал совместимость со всеми браузерами. Поскольку сообщение представляет собой просто JavaScript, оно не требует какого-либо специального синтаксического анализа. Идея использования JavaScript таким образом была настолько простой, что сам Крокфорд сказал, что он был не первым, кто сделал это — он утверждает, что кто-то в Netscape использовал JavaScript для передачи информации еще в 1996 году. 15

Крокфорд и Морнингстар поняли, что у них есть что-то, что можно использовать во всех видах приложений. Они назвали свой формат JSON, что является сокращением от «JavaScript Object Notation». Они начали предлагать ее клиентам, но вскоре обнаружили, что многие не хотят рисковать новой технологией, не имеющей официальной спецификации. Поэтому Крокфорд решил, что напишет один. В 2002 году Крокфорд купил домен JSON.org и разместил там грамматику JSON и эталонную реализацию парсера. Веб-сайт все еще работает, хотя теперь он содержит заметную ссылку на стандарт JSON ECMA, ратифицированный в 2013 году. 16 После запуска веб-сайта Крокфорд мало что сделал для продвижения JSON, но вскоре нашел людей, присылавших реализации парсера JSON для разных языков программирования. Происхождение JSON явно связано с JavaScript, но стало очевидно, что JSON хорошо подходит для обмена данными между произвольными языками.

JSON в AJAX

В 2005 году Джесси Джеймс Гарретт ввел термин «AJAX» в своем блоге, где он подчеркнул, что AJAX — это не какая-то одна новая технология, а скорее «несколько технологий, каждая из которых процветает сама по себе, объединяясь новыми мощными способами». 16 Далее в его сообщении в блоге описывалось, как разработчики могут использовать JavaScript и XMLHttpRequest для создания новых видов приложений, более отзывчивых и сохраняющих состояние, чем обычная веб-страница. Он указал на Gmail, Google Maps и Flickr как на примеры веб-сайтов, использующих технологии AJAX. Хотя «X» в «AJAX» означал XML, Гарретт указал на JSON как на вполне приемлемую альтернативу. Он написал, что «XML — это наиболее развитое средство для получения данных в клиенте AJAX и из него, но нет никаких причин, по которым вы не могли бы добиться тех же результатов, используя такую ​​технологию, как нотация объектов JavaScript, или любые подобные средства структурирования данных». 17

JavaScript и JSON однозначно должны были быть вместе. Семантика JSON напрямую сопоставляется с JavaScript, что делает его родным форматом обмена данными для языка. Разработчики быстро обнаружили, что с JSON проще работать в JavaScript, и многие предпочли его XML.

Когда JSON привлек внимание блогосферы, началось распространение JSON.

Почему JSON стал более популярным, чем XML

JSON — это собственный формат данных в приложениях JavaScript. С популяризацией JavaScript в последнее десятилетие было создано больше сообщений JSON, чем в любом другом формате данных. Написание приложений на JavaScript практически требует использования JSON для обмена данными. Возможны и другие форматы, но они требуют больше усилий, чем JSON. С ростом популярности JavaScript для разработки приложений JSON последовал за ним как простой в использовании и изначально интегрированный формат обмена данными.

Что касается блогосферы, то о JavaScript (и, следовательно, JSON) написано больше статей, примеров и руководств, чем о любой другой платформе программирования.

История и эволюционный путь Интернета сыграли значительную роль в популяризации JSON. По данным Stack Overflow, сейчас о JSON задают больше вопросов, чем о других форматах обмена данными. 18

alt_text

Согласно Google Trends, аналогичный профиль наблюдается при сравнении поискового интереса к JSON и XML. 19

alt_text

Означает ли распространение JavaScript, что JSON лучше, чем XML?

Сообщества разработчиков настаивают на том, что JSON стал более популярным, чем XML, из-за его краткой декларативной области действия и простой семантики. Сам Дуглас Крокфорд резюмирует некоторые преимущества JSON на сайте JSON.org: «JSON легче понять как людям, так и машинам, поскольку его синтаксис минимален, а структура предсказуема». 20 Другие критики XML обращают внимание на многословие XML как на «налог на угловые скобки». 21 Формат XML требует, чтобы каждый открывающий тег соответствовал закрывающему тегу, что приводит к избыточной информации, из-за которой XML-документ может быть значительно больше, чем эквивалентный документ JSON в несжатом виде. И, что, возможно, более важно, говорят разработчики: «это также затрудняет чтение XML-документа». 22

JSON с готовностью хвалят за его простоту и краткую семантику, а XML называют устаревшим стандартом прошлого из-за его многословия и кажущейся чрезмерной сложности. Многие статьи и сообщения в блогах предлагают ограниченную перспективу при сравнении JSON с XML, заставляя читателей полагать, что JSON является заменой XML. Это не тот случай!

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

JSON более популярен, чем XML, из-за доминирования JavaScript как наиболее широко используемого языка на сегодняшний день. Благодаря влиянию JavaScript на тенденции программного обеспечения в последнее десятилетие JSON продолжает привлекать все больше внимания, чем любой другой формат обмена данными. Блогосфера быстро повторяет, что «JSON лучше, чем XML», но чаще всего эти утверждения остаются необоснованными или подкрепляются упрощенными сравнениями семантики и многословия. Так один из стандартов лучше другого? Ответ на этот вопрос может дать только более глубокая оценка каждого стандарта.

Заключение

С 1990 года по сегодняшний день сеть прошла долгий путь. Войны браузеров между Netscape и Microsoft привели к катастрофе расхождения HTML, и требовалось решение для спасения Интернета. XML был изобретен для формализации XHTML и стал святым Граалем для вычислений в целом. Тенденции в веб-архитектуре и разработке браузеров, от рендеринга полных HTML-страниц внутренними серверами до AJAX и SPA, сосредоточили внимание на JavaScript, направляя разработчиков во всем мире на JSON.

Популярность JSON коррелирует с популярностью JavaScript. Благодаря простоте использования и короткой кривой обучения JavaScript привлек к написанию программного обеспечения больше новых разработчиков, чем любой другой язык. Благодаря встроенной интеграции JSON с самой популярной платформой разработки неудивительно, что о JSON в Stack Overflow задают больше вопросов, чем о любом другом формате обмена данными.

Благодаря тенденциям в области программного обеспечения в последние годы, привлекающим в отрасль все больше разработчиков JavaScript, JSON получил звание «самого популярного формата обмена данными».

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

Во второй части этой статьи мы подробно рассмотрим технические сильные и слабые стороны JSON и XML и оценим пригодность каждого стандарта для обычных приложений и предприятия. Более пристальный взгляд на «обмен данными» покажет широту его влияния на программный риск приложения в целом. Более глубокое понимание фундаментальных различий между JSON и XML позволит разработчикам лучше оценивать программный риск каждого стандарта по отношению к требованиям их проекта, что даст разработчикам возможность создавать более стабильное и более устойчивое к ошибкам и будущему ПО. неизвестные.

Кстати, интересная особенность спецификации JSON заключается в том, что вы не можете преобразовывать объекты JavaScript с двунаправленными отношениями, где дочерние свойства ссылаются на родительские свойства, в JSON. Это приведет к ошибке Uncaught TypeError: Converting circular structure to JSON . Как обойти это ограничение см. в разделе Поддержка двунаправленных отношений в JSON .

использованная литература

1. Интернет: Историческая энциклопедия. Хронология, том 3, с. 130 (АВС-КЛИО, 2005 г.)

2. Справочник по метаданным, семантике и онтологиям, с. 109 (World Scientific, декабрь 2013 г.)

3. WebDiy.org — Консорциум World Wide Web (W3C) — История

4. «JavaSoft выпускает Java 1.0» (Sun Microsystems, январь 1996 г.)

5. Пространственное обеспечение Интернета следующего поколения (Дэвид Энген, январь 2002 г.)

6. История XMLHTTP (AlexHopmann.com, январь 2007 г.)

7. Начало Ajax — стр. 2 (Wiley Publishing, март 2007 г.)

8. Ajax: новый подход к веб-приложениям (Джесси Джеймс Гарретт, февраль 2005 г.)

9. Краткая история «Аякса» (Аарон Шварц, декабрь 2005 г.)

10. «Что такое Kayak.com?» (Корпоративный информационный бюллетень, октябрь 2008 г.)

11. Внутренний просмотр: расширение парадигмы навигации при просмотре (Netscape, май 2003 г.)

12. «Автономный веб-сайт с использованием DHTML» (SlashDotSlash.com, июль 2012 г.)

13. Доставка данных и информации о форматировании для обеспечения манипулирования на стороне клиента (Патентное бюро США, апрель 2002 г.)

14. «Что такое Аякс?» Профессиональный Аякс, 2-е изд. (Уайли, март 2007 г.)

15. Дуглас Крокфорд: Сага JSON (Yahoo!, июль 2009 г.)

16. Стандарт ECMA 404 (ECMA International, декабрь 2017 г.)

17. Ajax: новый подход к веб-приложениям (Джесси Джеймс Гарретт, февраль 2005 г.)

18. Тенденции переполнения стека (переполнение стека, 2009–2019 гг.)

19. Google Тренды (Google, 2004-2019)

20. JSON: обезжиренная альтернатива XML (Крокфорд, 2006 г.)

21. XML: налог на угловые скобки (Coding Horror, май 2008 г.)

22. Xml — отстой (WikiWikiWeb, 2016)