application/schema+json
application/schema+json — это медиатип (MIME-тип), используемый для передачи данных, структурированных в соответствии со спецификацией JSON Schema, в формате JSON (JavaScript Object Notation). Он служит для однозначной идентификации содержимого, которое не является произвольным JSON, а представляет собой схему — формальное описание структуры, типов данных, ограничений и правил валидации для других JSON-документов.
История и стандартизация
Медиатип application/schema+json был официально зарегистрирован в IANA (Internet Assigned Numbers Authority) в 2011 году в рамках процесса стандартизации JSON Schema, начатого Крисом Райтом и другими участниками сообщества. Первоначально JSON Schema разрабатывалась как неформальный проект, но с 2016 года её развитие перешло под эгиду рабочей группы JSON Schema (JSON Schema Specification) при IETF (Internet Engineering Task Force). Регистрация медиатипа позволила отличать схемы от обычных JSON-документов при передаче по протоколу HTTP, что особенно важно для API, систем валидации и инструментов автоматической генерации кода.
Назначение и область применения
Основное назначение application/schema+json — передача схем JSON Schema. Схема, представленная в этом формате, описывает ожидаемую структуру JSON-данных: какие поля обязательны, какие типы данных допустимы (строка, число, объект, массив, булево значение), какие значения могут принимать перечисления, а также более сложные ограничения (регулярные выражения, диапазоны чисел, минимальная и максимальная длина строки). Использование отдельного медиатипа позволяет серверу и клиенту явно указывать, что передаваемый ресурс является схемой, а не данными, что упрощает автоматическую обработку, кэширование и документирование.
Структура и синтаксис
Документ с медиатипом application/schema+json представляет собой валидный JSON-объект, соответствующий спецификации JSON Schema (последняя стабильная версия — 2020-12). Ключевые элементы схемы включают:
$schema— URL, указывающий на версию спецификации (например,https://json-schema.org/draft/2020-12/schema`).$id— уникальный идентификатор схемы, часто в виде URI.type— базовый тип данных (object,array,string,number,integer,boolean,null).properties— описание полей объекта с указанием их типов и ограничений.required— массив обязательных полей.items— описание элементов массива.additionalProperties— булево значение или схема, определяющая, допустимы ли дополнительные поля.enum— перечисление допустимых значений.minimum/maximum— числовые ограничения.minLength/maxLength— строковые ограничения.pattern— регулярное выражение для строк.
Пример схемы:
``json { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://example.com/person.schema.json", "type": "object", "properties": { "firstName": { "type": "string" }, "lastName": { "type": "string" }, "age": { "type": "integer", "minimum": 0 } }, "required": ["firstName", "lastName"] } ``
Применение
Веб-API и REST-сервисы
Медиатип application/schema+json широко используется в REST API для описания форматов запросов и ответов. Например, сервер может возвращать схему по запросу клиента, чтобы клиент мог динамически адаптировать свою логику. В спецификации OpenAPI (Swagger) схемы JSON Schema передаются с этим медиатипом в документации.
Валидация данных
Инструменты валидации (например, Ajv, JSON Schema Validator) принимают схемы с медиатипом application/schema+json для проверки соответствия JSON-документов заданным правилам. Это распространено в системах обработки форм, конфигурационных файлов и обмена данными между микросервисами.
Генерация кода и документации
Схемы JSON Schema, передаваемые с этим медиатипом, используются для автоматической генерации классов на языках программирования (Java, TypeScript, Python), а также для создания интерактивной документации API (например, с помощью Swagger UI).
Хранение и обмен схемами
В реестрах схем (например, Schema Registry в Apache Kafka) медиатип application/schema+json применяется для идентификации и версионирования схем, обеспечивая согласованность данных между продюсерами и консюмерами.
Отличия от смежных медиатипов
application/json— используется для произвольных JSON-данных, не обязательно являющихся схемой. Клиент не может полагаться на то, что содержимое описывает структуру.application/schema-instance+json— зарегистрированный медиатип для экземпляров JSON, которые аннотированы ссылками на схему (например, с помощью ключа$ref). Отличается отapplication/schema+jsonтем, что передаёт данные, а не их описание.application/ld+json— используется для JSON-LD (Linked Data), где данные структурированы в формате связанных данных, а не описываются схемой.
Интересные факты
- Медиатип
application/schema+jsonне является обязательным для использования JSON Schema — схемы могут передаваться и с медиатипомapplication/json, но это снижает интероперабельность. - В спецификации HTTP заголовок
Content-Type: application/schema+jsonпозволяет прокси-серверам и кэшам корректно обрабатывать схемы отдельно от обычных JSON-данных. - Существуют расширения, такие как JSON Hyper-Schema, которые также используют медиатип
application/schema+jsonдля описания гипермедийных ссылок.
Источники
- IANA Media Types Registry:
application/schema+json - JSON Schema Specification (draft 2020-12), JSON Schema Organization
- RFC 6838 — Media Type Specifications and Registration Procedures
- OpenAPI Specification 3.0, OpenAPI Initiative
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →