Pular para o conteudo principal
CuteJSON
↑↓ Navegar Enter Selecionar Esc Fechar

Casos de uso comuns de JSON: APIs, arquivos de configuracao e armazenamento de dados

Publicado 3 min de leitura Por Akash Kinkar Pandey

JSON aparece em papeis suficientemente diferentes que vale a pena separa-los: o formato e o mesmo em todo lugar, mas o que cada caso de uso realmente precisa dele difere, e confundir um com outro e uma fonte comum de decisoes desajeitadas (adicionar comentarios a uma carga util de API gerada por maquina, ou esperar que um pipeline de log NDJSON seja analisado como um unico documento JSON).

Cargas uteis de API REST

O caso de uso mais comum por volume. Um corpo de requisicao e um corpo de resposta sao cada um um documento JSON, Content-Type: application/json, gerado por um lado e consumido pelo outro sem nenhum humano lendo no meio. Nada aqui precisa de comentarios ou conveniencia de edicao manual; o que precisa e uma gramatica sem ambiguidade que todas as linguagens analisem da mesma forma, que e a verdadeira forca do JSON. Uma carga util de REST tambem e a forma para a qual o Validador de JSON Schema existe: verificar uma resposta contra o contrato que a API deveria cumprir, e ver exatamente qual campo o viola e por que, antes que esse bug chegue ao codigo de producao que assume que o campo esta la.

Configuracao de aplicacao

package.json, tsconfig.json, composer.json, e dezenas de configuracoes de ferramentas alem. Esse e o caso de uso onde a falta de comentarios do JSON realmente custa algo: uma configuracao sem explicacao ao lado, porque o formato nao tem onde colocar uma. Algumas ferramentas contornam isso com uma chave // comment que ninguem le programaticamente, outras mudam para YAML ou um superconjunto de JSON (JSON5, JSONC) que adiciona comentarios de volta. Veja JSON vs YAML para o tradeoff completo; a versao curta e que arquivos de configuracao editados manualmente frequentemente se beneficiam dos comentarios do YAML, enquanto a configuracao gerada e consumida inteiramente por ferramentas funciona bem como JSON simples.

NoSQL e bancos de dados de documentos

MongoDB armazena documentos como BSON, um formato binario que e um superconjunto do modelo de dados do JSON, e retorna JSON (ou uma sintaxe de shell semelhante a JSON) quando voce consulta. CouchDB e a maioria dos armazenadores de documentos aceitam e retornam JSON diretamente. O apelo aqui e estrutural: toda a proposta de um banco de dados de documentos e armazenar dados aproximadamente na forma que sua aplicacao ja usa, em vez de normalizar em linhas e chaves estrangeiras primeiro, e o modelo de objetos e arrays do JSON e proximo o suficiente dos tipos nativos da maioria das linguagens para que a traducao seja quase gratuita.

Linhas de log e dados em streaming: NDJSON

Um unico documento JSON nao e bem transmitido: um analisador geralmente precisa de todo antes de poder produzir um valor, porque um documento so e valido quando seu colchete final chega. Newline Delimited JSON (NDJSON) resolve isso fazendo cada linha seu proprio valor JSON completo e independente, entao um pipeline de log, um topico Kafka, ou uma grande exportacao pode ser processado linha por linha sem manter todo o arquivo em memoria. O Conversor JSON para NDJSON converte um array JSON para esse formato linha-por-registro e volta, com recuperacao para um stream que tem uma linha malformada em vez de falhar todo o arquivo por um registro ruim.

Armazenamento do navegador

localStorage e sessionStorage so armazenam strings; qualquer coisa estruturada entra como JSON.stringify(value) e sai como JSON.parse(armazenado). Esse tambem e onde o problema de precisao de numeros que Tipos de Dados JSON Explicados cobre se torna um bug real em vez de uma curiosidade: fazer o round-trip de um grande ID inteiro atraves de localStorage via o proprio JSON.parse do navegador pode silenciosamente alterar o valor, que e exatamente o modo de fallo para o qual as ferramentas deste site sao construidas para evitar e reportar em vez de reproduzir.

Testando com seus proprios dados

Cada ferramenta mencionada acima roda inteiramente no seu navegador: nada colado no Formatador JSON, no conversor NDJSON, ou no Validador de Schema e nunca enviado para lugar nenhum, o que importa mais para exatamente o tipo de respostas de API reais e arquivos de configuracao dos quais esta pagina trata.

Voltar a todos os posts