Converter JSON Schema em esquema OpenAPI — Numio
Converte um JSON Schema (draft-04 ou posterior) em um Schema Object do OpenAPI 3.0. Arrays de tipos que contêm "null" viram "nullable: true", const vira um enum de um item e examples vira um único example.
Você valida payloads com um schema draft-07 e precisa do mesmo modelo em components/schemas de um documento OpenAPI 3.0.
JSON Schema
Quando usar
- Você valida payloads com um schema draft-07 e precisa do mesmo modelo em components/schemas de um documento OpenAPI 3.0.
- Suas ferramentas de OpenAPI 3.0 rejeitam "type": ["string", "null"] e você precisa reescrever os campos anuláveis.
Como usar
- Cole um JSON Schema no painel JSON Schema; ele precisa ser um JSON válido, porque a página o analisa antes de enviar.
- O schema é enviado para /api/json-schema-to-openapi-schema e convertido no servidor; o painel mostra um aviso informando isso.
- Copie o resultado do painel Open API Schema e coloque-o em components/schemas no seu arquivo 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"]
}Schema Object do OpenAPI 3.0
{
"type": "object",
"properties": {
"kind": {
"enum": [
"invoice"
]
},
"total": {
"type": "number",
"exclusiveMinimum": true,
"nullable": true,
"minimum": 0
},
"notes": {
"type": "string",
"example": "Net 30"
}
},
"required": [
"kind"
]
}Detalhes e limitações
A página envia sua entrada para uma rota do servidor (/api/json-schema-to-openapi-schema) para conversão; ela não é processada apenas no navegador. As rotas de API do Next.js aceitam por padrão corpos de requisição de até 1 MB.
A palavra-chave $schema é removida. exclusiveMinimum/exclusiveMaximum numéricos são reescritos na forma do OpenAPI 3.0: minimum/maximum mais um flag booleano.
Os valores de $ref são mantidos como estão e as definitions não são movidas para components/schemas, então você mesmo precisa corrigir os caminhos de referência.
O alvo é o OpenAPI 3.0. O OpenAPI 3.1 já usa JSON Schema diretamente e normalmente não precisa de conversão.
FAQ
Como os tipos anuláveis são convertidos?
Um array de tipos como ["number", "null"] vira "type": "number" com "nullable": true, como no exemplo.
Ele resolve referências $ref?
Não. A página não faz dereferência; "$ref": "#/definitions/Tag" e o bloco definitions são copiados sem alteração.
O que acontece com const e examples?
const vira um enum com um único valor, e o array examples é substituído por um único example tirado do primeiro item.