Valide o JSON antes das requisições de API

Uma validação rápida antes de enviar uma requisição de API ajuda a separar problemas de sintaxe JSON de erros de autenticação, schema e backend.

Por que validar antes de enviar

Quando uma requisição de API falha, a mensagem pode apontar para autenticação, permissões, validação de schema ou JSON malformado. Validar o body JSON antes elimina uma classe inteira de falhas antes da requisição chegar ao servidor. Também facilita revisar comandos cURL copiados, bodies do Postman, samples de webhooks e testes de integração.

Checks de sintaxe que vale rodar

Uma validação JSON estrita deve confirmar que o body parseia como JSON e que a saída formatada bate com o que você quer enviar.

  • Toda string e toda chave de objeto usa aspas duplas
  • Sem comentários ou vírgulas finais
  • Booleanos são true ou false, não True ou False
  • Valores ausentes são null ou chaves omitidas, não undefined
  • O valor de nível superior bate com a expectativa do endpoint

Headers também contam

Um body JSON válido ainda pode falhar se a requisição não declarar o Content-Type correto. Para a maioria das APIs JSON, mande Content-Type: application/json. Se o endpoint também checa Accept, inclua Accept: application/json para cliente e servidor concordarem no formato.

Body de requisição com erro

{ userId: 42, active: True, tags: ['beta',], }

Body de requisição corrigido

{ "userId": 42, "active": true, "tags": ["beta"] }

Depois da validação de sintaxe

A validação de sintaxe só prova que o documento é parseável. Em requisições de produção, verifique também o schema: campos obrigatórios, campos desconhecidos, tipos, tamanhos de array, valores de enum, strings de data e se identificadores numéricos deveriam ser números ou strings.

Dica de debug

Se o servidor continua rejeitando um JSON válido, compare o body formatado com um exemplo conhecido. Um diff semântico de JSON encontra mudanças reais de valores ignorando a ordem das chaves, especialmente útil quando payloads são gerados por ferramentas diferentes.

Um pequeno wrapper de fetch + Ajv

Valide o corpo da resposta contra um schema conhecido antes de entregá-lo ao código da aplicação. Compile o schema uma vez no load do módulo e proteja cada call: const validate = ajv.compile(schema); const res = await fetch(url); const data = await res.json(); if (!validate(data)) throw new Error("Schema mismatch: " + ajv.errorsText(validate.errors)); return data; — quebras de contrato upstream aparecem na borda, não cinco camadas adentro.