(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como validar esquemas JSON de uma API de Dados em Python: passo a passo

João Barros 10 de October de 2026 4 min de leitura

Este tutorial mostra como validar esquemas JSON de uma API de Dados em Python para garantir que os dados recebidos estão no formato esperado e reduzir erros em downstream. A validação é útil para detetar campos em falta, tipos errados e estruturas inesperadas antes de processar ou carregar dados.

Pré-requisitos

  • Python 3.8+ instalado
  • Pip para instalar pacotes (requests, jsonschema)
  • Conhecimentos básicos de JSON e Python

Passo 1: Porquê validar JSON de uma API de Dados

APIs podem mudar, devolver campos opcionais ou tipos diferentes. Validar com um esquema evita que código de processamento falhe de forma silenciosa e facilita logging e alertas. Usa-se um esquema JSON Schema (padrão) para descrever estrutura, tipos e campos obrigatórios.

Passo 2: Instalar dependências

Instala os pacotes necessários: requests para chamar a API e jsonschema para validar. É simples e rápido.

pip install requests jsonschema

Passo 3: Definir um JSON Schema mínimo

Cria um esquema que descreve os campos essenciais que esperas da API. Aqui fica um exemplo para dados de utilizadores com id, nome e e-mail. Ajusta conforme a tua API.

user_schema = {
    "type": "object",
    "properties": {
        "id": {"type": "integer"},
        "name": {"type": "string"},
        "email": {"type": "string", "format": "email"},
        "created_at": {"type": "string", "format": "date-time"}
    },
    "required": ["id", "name", "email"]
}

Passo 4: Fazer a chamada à API e validar uma resposta única

Usa requests para obter JSON e jsonschema.validate para verificar. Trata exceções para reportar erros claros (tipo, campo em falta, formato).

import requests
from jsonschema import validate, ValidationError

url = "https://api.exemplo.com/users/123"  # substitui pela tua endpoint
resp = requests.get(url, timeout=10)
resp.raise_for_status()
data = resp.json()

try:
    validate(instance=data, schema=user_schema)
    print("Validação OK")
except ValidationError as e:
    print("Validação falhou:", e.message)

Passo 5: Validar listas de registos e recolher erros

Quando a API devolve uma lista, valida cada item e acumula erros. Assim consegues processar registos válidos e registar os inválidos para inspeção.

url = "https://api.exemplo.com/users"
resp = requests.get(url, params={"page": 1}, timeout=10)
resp.raise_for_status()
items = resp.json()

valid_items = []
errors = []
for i, item in enumerate(items):
    try:
        validate(instance=item, schema=user_schema)
        valid_items.append(item)
    except ValidationError as e:
        errors.append({"index": i, "error": e.message, "item": item})

print(f"{len(valid_items)} registos válidos, {len(errors)} inválidos")

Passo 6: Lidar com campos opcionais e esquemas flexíveis

Se a API tem campos adicionais, usa "additionalProperties": true ou define um subschema para campos extra. Para esquemas que mudam frequentemente, valida apenas os campos essenciais (minimizar falsos positivos).

flex_schema = {
    "type": "object",
    "properties": {
        "id": {"type": "integer"},
        "name": {"type": "string"}
    },
    "required": ["id"],
    "additionalProperties": True
}

Passo 7: Erros comuns e como os resolver

Erros habituais: format missing (usar formats ou validar manualmente), tipos inteiros enviados como string (converter ou aceitar ambos com "oneOf"), e campos opcionalmente ausentes. Regista a resposta bruta ao detectar erro para diagnóstico.

from jsonschema import Draft7Validator

validator = Draft7Validator(user_schema)
for error in sorted(validator.iter_errors(data), key=str):
    print(error.message)

Verificar o resultado

Testa com chamadas reais: deves ver "Validação OK" para registos conformes e receber mensagens claras para falhas. Para listas, confirma que valid_items contém apenas registos válidos e que errors tem entradas com mensagens de erro. Adiciona logs com URL, status code e payload quando uma validação falha.

Conclusão

Validar esquemas JSON de uma API de Dados em Python reduz falhas e facilita a deteção de alterações na API. Próximos passos: integrar a validação num pipeline ETL, automatizar testes com fixtures e usar CI para alertar quando a API muda. Dica: começa por validar só os campos críticos e expande o esquema conforme ganhas confiança — tens alguma API específica que queiras validar?