Конвертер схемы JSON в спецификации OpenAPI — Numio
Преобразует JSON Schema (draft-04 и новее) в OpenAPI 3.0 Schema Object. Массивы type, содержащие "null", превращаются в "nullable: true", const — в enum из одного элемента, а examples — в одиночный example.
Вы проверяете данные схемой draft-07, и та же модель нужна в разделе components/schemas документа OpenAPI 3.0.
JSON Schema
Когда пригодится
- Вы проверяете данные схемой draft-07, и та же модель нужна в разделе components/schemas документа OpenAPI 3.0.
- Ваши инструменты OpenAPI 3.0 не принимают "type": ["string", "null"], и nullable-поля нужно переписать.
Как пользоваться
- Вставьте JSON Schema в панель JSON Schema; это должен быть корректный JSON, так как страница разбирает его перед отправкой.
- Схема отправляется на /api/json-schema-to-openapi-schema и конвертируется на сервере; панель показывает соответствующее уведомление.
- Скопируйте результат из панели Open API Schema и поместите его в components/schemas вашего файла OpenAPI.
JSON Schema
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"kind": { "const": "invoice" },
"total": { "type": ["number", "null"], "exclusiveMinimum": 0 },
"notes": { "type": "string", "examples": ["Net 30"] }
},
"required": ["kind"]
}OpenAPI 3.0 Schema Object
{
"type": "object",
"properties": {
"kind": {
"enum": [
"invoice"
]
},
"total": {
"type": "number",
"exclusiveMinimum": true,
"nullable": true,
"minimum": 0
},
"notes": {
"type": "string",
"example": "Net 30"
}
},
"required": [
"kind"
]
}Подробности и ограничения
Страница отправляет ваши данные на серверный маршрут (/api/json-schema-to-openapi-schema) для конвертации; они обрабатываются не только в браузере. API-маршруты Next.js по умолчанию принимают тело запроса размером до 1 МБ.
Ключевое слово $schema удаляется. Числовые exclusiveMinimum/exclusiveMaximum переписываются в форму OpenAPI 3.0: minimum/maximum плюс булев флаг.
Значения $ref остаются как есть, а definitions не переносятся в components/schemas, поэтому пути ссылок нужно исправить самостоятельно.
Целевая версия — OpenAPI 3.0. OpenAPI 3.1 уже напрямую использует JSON Schema и обычно не требует конвертации.
FAQ
Как конвертируются nullable-типы?
Массив type вроде ["number", "null"] становится "type": "number" с "nullable": true, как в примере.
Разрешаются ли ссылки $ref?
Нет. Страница не выполняет разыменование; "$ref": "#/definitions/Tag" и блок definitions копируются без изменений.
Что происходит с const и examples?
const становится enum с одним значением, а массив examples заменяется одиночным example, взятым из его первого элемента.