Открыть сервис

RFC 4627

RFC 4627 — это информационный документ (Request for Comments) инженерного совета Интернета (IETF), опубликованный в июле 2006 года. Он вводил спецификацию формата обмена данными JSON (JavaScript Object Notation). Документ официально закреплял структуру JSON как текстового формата, основанного на подмножестве синтаксиса языка JavaScript, и определял его использование для представления простых структур данных.

История

Потребность в стандартизации JSON возникла из-за его растущей популярности как альтернативы XML. К середине 2000-х годов JSON уже активно применялся в веб-приложениях для асинхронного обмена данными между сервером и клиентом, в первую очередь в технологии Ajax (Asynchronous JavaScript and XML). Разработчик JSON, Дуглас Крокфорд, в 2002—2005 годах продвигал его как более лёгкий и читаемый формат по сравнению с XML, но отсутствие официального стандарта сдерживало его принятие.

RFC 4627 был написан Дугласом Крокфордом и опубликован IETF. Стандарт устранил неоднозначности в интерпретации JSON, возникшие из-за его неформального описания. После публикации RFC 4627 JSON получил официальное признание, что ускорило его внедрение в языки программирования и базы данных.

В марте 2014 года RFC 4627 был заменён стандартом RFC 7159, который ввёл несколько уточнений, в том числе разрешил использование экранированных символов в строках и более строго определил числовые значения. В 2017 году JSON был стандартизирован как ECMA-404 и затем как ISO/IEC 21778:2017.

Структура и типы данных

RFC 4627 определял JSON как текстовый формат для сериализации структурированных данных, основанный на двух структурах: объект (неупорядоченный набор пар «ключ: значение») и массив (упорядоченный список значений).

Спецификация ограничивала JSON четырьмя примитивными типами данных:

  • Строка (string): последовательность символов Unicode, заключённая в двойные кавычки, с возможностью экранирования специальных символов.
  • Число (number): может быть целым, дробным (с десятичной точкой) или экспоненциальным, без ведущих нулей. В RFC 4627 числа не могли начинаться с точки и не поддерживали знака «+» в экспоненте.
  • Булево значение (boolean): true или false.
  • Null: null.

Формат допускал вложенность объектов и массивов произвольной глубины.

Пример структуры (по спецификации RFC 4627)

``json { "имя": "Иван", "возраст": 30, "хобби": ["чтение", "бег"], "супруга": null } ``

RFC 4627 также вводил понятие «документа JSON» — корневого объекта или массива. Любой допустимый JSON-текст должен был представлять собой либо один объект в фигурных скобках ({}), либо один массив в квадратных скобках ([]). Это исключало, например, передачу одного числа или строки как самостоятельного документа.

MIME-тип

RFC 4627 устанавливал для JSON интернет-медиатип application/json. Это стало стандартом для Content-Type в HTTP-ответах и запросах, передающих данные в формате JSON. Также документ рекомендовал использование кодировки UTF-8 как основной, но допускал UTF-16 и UTF-32 при указании BOM (Byte Order Mark) или явным согласованием сторон.

Критика и недостатки RFC 4627

Несмотря на то что RFC 4627 сыграл ключевую роль в стандартизации JSON, он содержал ряд ограничений и неоднозначностей, которые вызвали критику со стороны разработчиков:

  • Отсутствие комментариев. JSON, в отличие от XML, не поддерживал комментарии, что создавало неудобства при ручной правке файлов.
  • Ограничение на корневой элемент. Требование, чтобы документ JSON обязательно был объектом или массивом, мешало передаче простых значений (например, одного числа) в некоторых API.
  • Неопределённость с числами. Спецификация не задавала точность для чисел с плавающей точкой, что приводило к проблемам с потерей точности при переводе чисел (например, 64-битных целых).
  • Правила экранирования. RFC 4627 не допускал экранирование некоторых символов, таких как пробел, что усложняло обработку строк с управляющими кодами.

Эти проблемы были частично решены в более поздних версиях стандарта, особенно в RFC 7159 и ECMA-404.

Применение

После стандартизации RFC 4627 JSON стал основным форматом для обмена данными в современных веб-приложениях и мобильных приложениях. Он используется в RESTful API, в конфигурационных файлах (например, в composer.json для PHP, package.json для Node.js), в базах данных NoSQL (MongoDB, CouchDB) и как формат для хранения сериализованных объектов в памяти. В России JSON активно применяется в серверной разработке, в микросервисной архитектуре, а также в государственных информационных системах, таких как портал «Госуслуги» и «Банк данных исполнительных производств» ФССП.

Источники

  • Документ RFC 4627 «The application/json Media Type for JavaScript Object Notation (JSON)» (2006)
  • Стандарт ECMA-404 «The JSON Data Interchange Syntax» (2013)
  • ISO/IEC 21778:2017 «Information technology — The JSON data interchange syntax»
  • Публикация Дугласа Крокфорда «JSON: The Fat-Free Alternative to XML» (2006)
  • Технический блог IETF о замене RFC 4627 на RFC 7159 (2014)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →