Ao trocar dados entre aplicações, serviços web ou APIs, mesmo o mais pequeno erro estrutural pode comprometer todo o processo. É por isso que a validação de dados JSON é um passo essencial em muitos cenários, incluindo integração de APIs, importação/exportação de dados, configuração de aplicações e comunicação entre microsserviços. O 4D 21 R3 não é apenas uma atualização do Draft 2020-12, é um alinhamento total com os padrões modernos da Web e das APIs. As validações JSON tornam-se mais poderosas, mais expressivas e totalmente compatíveis com as ferramentas atuais.
O que é um esquema?
Um esquema JSON permite-lhe descrever com precisão a estrutura esperada de um documento: tipos de dados, campos obrigatórios, valores permitidos e formatos (e-mail, URL, etc.).
Graças a este esquema, pode garantir a qualidade e a fiabilidade das suas trocas de dados sem ter de escrever manualmente código de verificação. Se o JSON recebido não estiver em conformidade com as regras definidas, o 4D indica-lhe exatamente onde e por que razão a validação falha.
Isto poupa tempo considerável, aumenta a segurança das suas aplicações e fornece uma base sólida para a conceção de interfaces robustas ou serviços web fiáveis.
A 4D oferece o comando `JSON Validate ` para comparar um objeto JSON com um esquema em conformidade com a norma JSON Schema. Com o 4D 21 R3, este comando dá um grande salto; agora suporta as versões mais recentes do padrão (Draft 2020-12), oferecendo maior flexibilidade, novas palavras-chave (const, if/then/else, unevaluatedProperties, …), validação de data nativa do 4D e melhor interoperabilidade com ferramentas modernas.
Exemplo: utilização de regras condicionais
O novo padrão JSON Schema introduz regras condicionais poderosas, permitindo-lhe codificar parte da sua lógica de negócio diretamente no esquema, algo que era complicado ou impossível com o Draft-04.
Vejamos um exemplo clássico: validar um pagamento dependendo do método selecionado. Dependendo do método de pagamento:
- se for um cartão de crédito, “cardNumber” e “expiryDate” devem ser fornecidos,
- se for uma transferência bancária, “iban” e “bic” são obrigatórios,
- caso contrário (por exemplo, pagamentos em dinheiro), nenhum destes campos é obrigatório.
Com o Draft-04, era necessário implementar todas estas verificações manualmente no código 4D. O esquema só podia definir tipos, restrições básicas e campos obrigatórios, mas não conseguia expressar lógica condicional como “se paymentMethod = credit_card, então exigir cardNumber e expiryDate”.
O Draft-2020-12 muda tudo. Agora pode definir estas regras condicionais diretamente no JSON Schema. Aqui está um exemplo prático:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Esquema de Encomenda",
"type": "object",
"properties": {
"orderId": { "type": "integer" },
"customer": { "type": "string" },
"amount": { "type": "number", "minimum": 0 },
"paymentMethod": {
"type": "string",
"enum": ["cartão_de_crédito", "transferência_bancária", "dinheiro"]
},
"número_do_cartão": { "type": "string", "padrão": "^[0-9]{16}$" },
"data_validade": { "tipo": "string", "padrão": "^(0[1-9]|1[0-2])/[0-9]{2}$" },
"iban": { "tipo": "string" },
"bic": { "type": "string" }
},
"required": ["orderId", "customer", "amount", "paymentMethod"],
"if": { "properties": { "paymentMethod": { "const": "credit_card" } } },
"then": { "required": ["cardNumber", "expiryDate"] },
"else": {
"if": { "properties": { "paymentMethod": { "const": "bank_transfer" } } },
"then": { "required": ["iban", "bic"] }
}
}
Este esquema combina:
- expressões regulares (padrão) para controlar o formato dos números;
- regras condicionais (if/then/else) para adaptar os campos obrigatórios consoante o tipo de pagamento.
Em seguida, no lado do 4D, basta validar a resposta:
var $response; $schema; $result : Object
$response := JSON Parse($json; *)
$schema := JSON Parse($jsonSchema)
$result := JSON Validate($response; $schema)
If ($result.success)
// your treatment
Else
// manage errors
End if
Graças à validação integrada, o seu código 4D permanece simples: não há necessidade de testar manualmente as condições com base no método de pagamento.
O esquema torna-se uma verdadeira especificação funcional que pode ser partilhada entre a equipa de backend, a de front-end ou mesmo parceiros externos.
Compatibilidade
Cada esquema JSON especifica o padrão a utilizar através do atributo $schema.
No 4D, apenas dois analisadores de esquemas JSON são suportados:
- Draft-04
- Draft 2020-12
O analisador selecionado é determinado exclusivamente pelo valor da propriedade $schema no documento JSON Schema.
Por exemplo:
- Para utilizar o Draft-04:
"$schema": "http://json-schema.org/draft-04/schema#"
- Para utilizar o Rascunho 2020-12:
"$schema": "https://json-schema.org/draft/2020-12/schema"
Isto significa que os seus esquemas existentes baseados no Draft-04 continuarão a funcionar perfeitamente, ao mesmo tempo que lhe dão a liberdade de adotar a nova versão ao seu próprio ritmo.
Se o atributo $schema não for especificado, o 4D utiliza por predefinição o Draft-04. No entanto, recomendamos vivamente que especifique a norma a utilizar. Se partilhar o seu esquema para validar respostas da sua API REST, ou para explicar o formato da resposta a uma IA, estas precisam de saber qual a versão do esquema que está a utilizar.
Pontos-chave
Com o 4D 21 R3, o comando JSON Validate está alinhado com os padrões modernos de validação JSON, tornando possível validar dados provenientes de APIs de IA ou de qualquer outro serviço web. Beneficia de:
- suporte para o mais recente padrão JSON Schema,
- novas palavras-chave mais poderosas,
- compatibilidade melhorada com ferramentas do setor,
- mantendo a compatibilidade com os seus esquemas existentes.
Ao combinar o JSON Validate com chamadas de API nos seus projetos 4D, reforça a fiabilidade das suas integrações de IA e protege os seus fluxos de dados, sem qualquer esforço adicional. Esta atualização posiciona a 4D entre as plataformas capazes de falar a linguagem das APIs modernas, dos microsserviços e da IA generativa.
De momento, não é possível deixar comentários nesta publicação.