Данные и форматы

JSON Schema и генераторы типов

Когда ответу API нужен формальный контракт, а разрастающемуся проекту — типы вместо интерфейсов, написанных руками, эти инструменты превращают реальные примеры JSON в нечто структурированное. Сгенерируйте JSON Schema для документирования и проверки данных или сразу получите типизированный код на TypeScript, Go, Java, Python, Swift, Rust, C#, Dart или Scala, не описывая модели вручную самостоятельно.

Генераторы типов анализируют сразу несколько примеров массива, а не один объект, поэтому необязательные и непостоянные поля определяются, а не угадываются. Данные из JSON Schema создают воспроизводимые тестовые фикстуры по seed, а сравнение JSON-схем помечает критические изменения по направлению — поле, обязательное для поставщика данных, ломает не то же самое, что поле, обязательное для потребителя. Всё считается локально в браузере.

11 инструментов

Вопросы об инструментах категории «Схемы и генерация типов»

Как получить типы TypeScript из ответа API в формате JSON?

Вставьте один или несколько примеров ответа в JSON в TypeScript — несколько примеров массива вместо одного помогают инструменту заметить поля, которые иногда отсутствуют, и пометить их необязательными, а не гадать. Так же работают JSON в Go, JSON в Java, JSON в Python и другие генераторы моделей на этой странице.

В чём разница между JSON Schema и интерфейсом TypeScript?

Интерфейс TypeScript проверяет форму данных только на этапе компиляции, внутри вашего кода. JSON Schema — рантайм-контракт, независимый от языка: по нему можно проверять реальные данные Валидатором JSON Schema, делиться им с другими сервисами или генерировать тестовые данные через Данные из JSON Schema.

Как понять, что изменение JSON Schema сломает существующих потребителей?

Прогоните обе версии через сравнение JSON-схем. Оно показывает изменения по направлению: новое обязательное поле ломает тех, кто формирует данные по старой схеме, а поле, ставшее необязательным, в основном затрагивает строгих потребителей. Важно смотреть именно направление изменения, а не только сам diff.