Sobre esta ferramenta
A validação por schema transforma “a resposta parece certa” em uma verificação de contrato repetível: campos obrigatórios, tipos, formatos, enums e formato dos arrays. Este validador usa o Ajv, a mesma biblioteca que muitas suítes de teste em JavaScript usam, com ajv-formats para checar email, date-time, uuid e uri. Cada erro é listado com o caminho da instância (/items/1/qty) e uma mensagem clara, e todos os erros são informados, não só o primeiro. Se você ainda não tem um schema, cole uma resposta sabidamente correta, gere um schema inicial a partir dela e depois deixe-o mais rigoroso à mão.
Como usar
- Cole o schema à esquerda e os dados JSON à direita, ou carregue o schema de pedido de exemplo e seus dados propositalmente quebrados.
- Deixe o draft em “Auto” para seguir a palavra-chave $schema do schema, ou force 2020-12 ou draft-07.
- Corrija os erros listados; o resultado é atualizado enquanto você digita.
- Para começar um novo schema, cole uma resposta real como dados e clique em “Generate schema from data”.
Perguntas frequentes: Validador de JSON Schema
Devo usar draft 2020-12 ou draft-07?
Use o que suas outras ferramentas suportam. O OpenAPI 3.1 está alinhado ao 2020-12, enquanto muitos validadores mais antigos e as ferramentas de OpenAPI 3.0 estão mais próximos do draft-07. As principais diferenças visíveis são os arrays de tupla (prefixItems no 2020-12, items como array no draft-07) e $defs versus definitions.
O schema gerado é bom?
É um ponto de partida inferido de um único exemplo: tipos, objetos aninhados, formato dos itens de arrays, formatos comuns de strings e todas as chaves vistas no exemplo marcadas como obrigatórias. Ele não tem como saber quais campos são opcionais, quais valores são enums nem os limites numéricos, então revise-o antes de usá-lo como contrato.
Por que um e-mail inválido é aceito?
A palavra-chave “format” só é aplicada quando o validador ativa a checagem de formatos. Esta ferramenta a ativa via ajv-formats; se o seu framework de teste não fizer isso, adicione o plugin de formatos lá também, ou os mesmos dados vão passar.