oneOf: Строгий выбор
Используйте oneOf, когда объект может быть только одного типа. Например, поле "payment" может быть либо "credit_card", либо "paypal", но не оба сразу. Это критично для строгой типизации в TypeScript.
Кузница структурных данных для разработчиков. Научитесь создавать строгие, производительные и расширяемые схемы, используя возможности Draft 2020-12.
Стандарт эволюционировал. Draft 2020-12 принес с собой не просто синтаксические обновления, а фундаментальное изменение способа связывания данных.
Ключевое нововведение — $dynamicRef. Это позволяет создавать рекурсивные структуры (например, бесконечные вложенные комментарии или древовидные меню) без жесткой привязки к конкретным именам.
В JsonForge v2.0 мы полностью переработали движок рендеринга, чтобы поддерживать эти ссылки нативно.
Если вы все еще используете Draft-07, вы упускаете возможность писать более чистые и модульные схемы. Переход занимает минуты, а качество данных растет многократно.
Самая частая ошибка — бесконтрольное использование полиморфизма. Как делать правильно?
Используйте oneOf, когда объект может быть только одного типа. Например, поле "payment" может быть либо "credit_card", либо "paypal", но не оба сразу. Это критично для строгой типизации в TypeScript.
anyOf подходит, если данные могут соответствовать нескольким схемам одновременно. Идеально для миксинов или расширений профиля пользователя (например, "профиль" + "покупатель" + "продавец").
Используйте if/then/else для условной валидации. Например: "Если поле 'type' равно 'admin', тогда поле 'security_clearance' обязательно". Это заменяет сотни строк кода валидации на бэкенде.
Спор о том, как правильно описывать null, бушевал годами. В 2024 году есть консенсус.
Старый подход "type": ["string", "null"] часто ломал генераторы типов в TypeScript и Go.
Рекомендуется использовать oneOf с явным разделением типов. Это гарантирует, что ваша IDE будет предлагать правильные автодополнения: либо строка, либо null, но не мутант.
JsonForge автоматически применяет паттерн oneOf при создании nullable полей в визуальном редакторе, защищая ваш код от "неопределенных" ошибок.
Огромные схемы замедляют валидацию. Используйте $ref для переиспользования общих фрагментов (например, "Address" или "User").
JsonForge оптимизирует граф зависимостей, сокращая размер итогового JSON файла на 40%.
PDF-гайд с синтаксисом Draft 2020-12, примерами генерации TypeScript и рецептами валидации.