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 →