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

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 →