Что такое JSON Schema?

Ответ

JSON Schema — это стандарт (спецификация IETF) для описания структуры, валидации и документирования данных в формате JSON. Она определяет правила, которым должен соответствовать JSON-документ: типы данных, обязательные поля, диапазоны значений, форматы строк и вложенные объекты.

Зачем это нужно?

  • Валидация данных: Проверка входящих запросов API и исходящих ответов.
  • Документирование: Четкое описание формата данных для разработчиков.
  • Генерация: Автоматическая генерация тестовых данных, форм или кода.
  • IDE-подсказки: Улучшение автодополнения в редакторах кода.

Пример простой схемы (draft-07):

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer", "minimum": 0 }
  },
  "required": ["name"],
  "additionalProperties": false
}

Эта схема описывает объект, где:

  • name — обязательная строка.
  • age — необязательное целое число, не меньше 0.
  • Запрещены любые другие поля (additionalProperties: false).

Ответ 18+ 🔞

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

Это, по сути, твой личный надзиратель для JSON-ок. Спецификация, стандарт, всё дела. Его задача — объяснить всем и каждому, как должен выглядеть твой JSON-документ, чтобы его не вырвало при первом же взгляде. Какие поля обязательны, какие типы данных, какие там числа должны быть — всё это он регламентирует, ёпта.

А нахуя это вообще надо, спросишь ты?

  • Проверка, что тебе не подсунули хуйню: Входящий запрос в API или ответ от сервиса — всё проходит через эту схему. Если данные кривые, схема их нахуй пошлёт, и правильно сделает.
  • Документация, которую реально читают: Вместо того чтобы писать в Slack «эй, бро, поле created_at теперь строка в ISO формате», ты просто обновляешь схему. И все сразу видят, что к чему. Волшебство, блядь.
  • Автоматом генерировать можно всё что угодно: Тестовые данные, формы на фронте, даже куски кода. Один раз описал схему — и потом пожинаешь плоды, как ленивый, но умный садовод.
  • Подсказки в редакторе: Твой IDE перестаёт тупить и начинает умно предлагать поля. Просто потому что знает схему. Удобно, сука.

Вот, смотри, простейший пример (draft-07), чтоб понятно было:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer", "minimum": 0 }
  },
  "required": ["name"],
  "additionalProperties": false
}

Расшифровываю на человеческом:

  • nameобязательная строка. Без неё — пиздец, валидация не пройдёт.
  • age — число целое, можно не указывать. Но уж если указал, то пусть будет ноль или больше. Отрицательный возраст — это уже за гранью, даже для этой вселенной.
  • additionalProperties: false — это, блядь, святое. Значит, никаких левых полей типа "hobby": "кодить на Haskell" добавлять нельзя. Всё строго по списку. Порядок, сука.

Вот и весь базис. Не так страшен чёрт, как его малюют. Главное — начать использовать, а там уже и до сложных схем с условиями (if/then) дойдёшь.