xml x jason

XML vs JSON: Entenda como fazer a melhor escolha

O XML salvou a vida de desenvolvedores por anos a fio. Graças a ele, pudemos ter um lugarzinho especial de compartilhamento de todo tipo de informações entre sistemas, sem depender da linguagem em que estes eram implementados. O tempo passou e ele acabou sumindo aos poucos, até que as perguntas surgiram: por onde ele anda? Quem é esse tal JSON?

A popularidade do JavaScript

Engana-se quem acha que o XML morreu. Ele ainda está ativo e é válido em várias situações, conforme veremos a seguir. Contudo, sua popularidade realmente diminuiu bastante, muito pelo sucesso de outra linguagem: o JavaScript.

Como já falamos nas 5 linguagens de programação para aprender em 2017, o JS é quase uma unanimidade no mundo web, que basicamente movimenta nosso padrão de vida atual. Quem vive hoje em dia sem visitar um site, acessar o WhatsApp ou visitar seu perfil do Facebook? Com a presença massiva da internet em nosso cotidiano, precisamos acessar informações de forma rápida e eficiente, e é aí que entra a linguagem.

Por ser leve e flexível, o JavaScript é usado em inúmeros sites, seja no lado do cliente ou do servidor, com o Node.js. Com tanta fama, o JSON (ou JavaScript Object Notation) acabou se tornando uma escolha natural (e preferível) para assumir a vaga, por ser um formato desenvolvido a partir da linguagem – consequentemente, sua interoperabilidade com o JS é a melhor possível.

Em 2011, 20% das novas APIs usavam apenas JSON, um número que certamente aumentou de lá pra cá. Além disso, APIs que utilizavam protocolos tipo SOAP e XML-RPC, baseados em XML, têm dado lugar à flexibilidade da arquitetura REST, que utiliza as duas notações.

A união faz a força

Tanta popularidade em torno desse ambiente com o JavaScript como grande ponto central fortaleceu comunidades empenhadas a melhorar todas as tecnologias periféricas. Da mesma forma que o Node.js tem hoje uma capacidade computacional impressionante, o JSON conseguiu desenvolver-se da mesma forma.

Com isso, grandes vantagens que o XML possuía em comparação ao JSON tem caído aos poucos. Exemplos disso são os XML Schemas, as transformações XSLT e o XPath, que já possuem tecnologias equivalentes no JSONJSON Schema, JOLT e JSONPath, respectivamente.

A integração com outros ambientes de desenvolvimento também deixou de ser problema. Embora JSON se encaixe muito bem com o JavaScript (e com Python), isso não era necessariamente verdade em outras linguagens. Porém, a notação hoje conta com centenas de ferramentas de integração em C++, Perl, R e tantas outras linguagens, encontradas facilmente na página oficial do formato.

XML ainda vive

Por outro lado, a galera do XML ainda permanecer forte. Afinal, depois de tantos anos na hegemonia, uma comunidade inteira não desaparece da noite pro dia, não é? Suas tecnologias também são bem consolidadas, a exemplo dos próprios Schemas que, com o uso dos namespaces, ainda são uma ferramenta bem poderosa na hora da implementação.

Eles são excelentes, por exemplo, em resolver conflitos causados por diversas aplicações. Claro, o JSON possui uma alternativa: o JSON-LD pode ajudar em algumas ocasiões, mas o XML ainda parece ser uma preferência em casos complexos.

No entanto, o principal destaque do XML (e que nem o JSON-LD consegue aliviar completamente) são os metadados. O poder da linguagem está justamente na capacidade de guardar ou vincular dados em qualquer formato, graças à liberdade dada ao usuário de definir suas marcações. Assim, uma das formas é usar atributos a fim de definir metadados, tipo um identificador único ou um tipo definido pelo desenvolvedor a um objeto, por exemplo. Esse tipo de abstração é complicado de ser atingido por outras notações, como YAML, JSON ou Simple Outline XML.

Quanto mais simples melhor

Tentar suprir as necessidades resolvidas pelo XML, inclusive, é um dos grandes dilemas a respeito do JSON. O objetivo da notação é entregar uma solução simples de ser lida, leve e rápida. Ao tentar preencher as lacunas já preenchidas pelo XML, a filosofia “keep it simple” acaba de fora da tecnologia. Isso influencia diretamente os próprios aspectos já citados em que ela leva vantagem, como legibilidade e performance.

Ambos os lados alegam que suas partes são mais fáceis de entender, e eles não estão errados. No caso de um número baixo de dados, o JSON e seu pareamento chave-valor torna claro o objeto a ser tratado, porém, quando começamos a perceber um grande volume de valores complexos, a estrutura em árvore do XML, embora cheia de palavras e repetições, torna as coisas menos difíceis de entender, em comparação com a infinidade de chaves e parênteses que o JSON precisaria ao denotar a mesma situação.

Nesse caso, a própria compressão dos arquivos (e seu consequente peso na transmissão dos dados) também é afetada. Um estudo feito por David Lee, engenheiro líder na Marklogic, e publicado pelo consultor de TI Jan Stenberg no site InfoQ Brasil levou a conclusões interessantes:

  • A velocidade de análise (parsing) varia de acordo com a técnica usada. A análise com JavaScript puro é mais rápida para XML do que para o JSON, enquanto a consulta é normalmente mais rápida para o JSON. Ambos apresentando exceções, em que o contrário é verdadeiro;
  • O uso da biblioteca JavaScript jQuery impõe uma penalidade exagerada para o JSON, e pior ainda para o XML;
  • Documentos compactados em todos os formatos, mesmo representações muito grandes em JSON ou XML apresentam tamanho idêntico após a compressão, o que indica que ambos possuem o mesmo conteúdo de informação;
  • A transferência de documentos para uma grande variedade de dispositivos leva efetivamente o mesmo tempo em cada dispositivo, independentemente do formato adotado (XML ou JSON).

Outro a fazer essa comparação de desempenho, com foco em Web APIs, foi o brasileiro Nickolas Silva, na página PHPSP. Com base em seus testes feitos utilizando compactação gzip e deflate, ele chegou às seguintes ideias:

  • Ambos possuem vantagens semânticas, estéticas e de implementação.
  • Tratando-se de transporte, JSON possui uma pequena vantagem para poucos registros, mas, conforme o número de registros cresce, maior a vantagem da marcação XML.
  • Em complexidade, XML e JSON possuem a mesma capacidade: XML com sua estrutura de árvore e DTD, e JSON com sua especificação JSON-LD.
  • A manipulação, mesmo sendo uma ideia muito subjetiva, aparenta ser mais simples para JSON, pois se baseia na estrutura chave-valor em vez da estrutura de árvore, muito mais complexa de interpretação (sob aspecto de uma estrutura lógica). Apesar disso, estamos num período em que se faz comum a programação de alto nível – como JavaScript, PHP, Java – e podemos contar com frameworks que abstraem e facilitam estes procedimentos.

Afinal, qual usar?

Quer atualizar seu sistema para o formato? Muita calma nessa hora! Segundo o famoso escritor Nelson Rodrigues, “toda unanimidade é burra. Quem pensa com a unanimidade não precisa pensar”.

Com essa ideia, é importante ressaltar: não é porque o JSON virou tendência que ele é sempre a melhor solução. Um software que funciona muito bem com requisições SOAP, por exemplo, mesmo que comece a ser considerado “antiquado”, ainda exige o XML e pode trazer muita dor de cabeça na sua tentativa de mudar as coisas.

Assim, depois de analisar os prós e contras de cada um, é o seu projeto que vai dizer qual é melhor. Se a ideia é criar aplicações leves, rápidas, sem muitas exigências (como é geralmente o caso na web) e, principalmente, o JavaScript faz parte do dia a dia, o JSON deve facilitar muito seu trabalho. Além disso, com o aumento no número de web designers aprendendo a linguagem para fazer mágicas em seus trabalhos, JSON acaba mais aceito por ter inicialmente melhor legibilidade.

Por outro lado, se o sistema exige uma maior complexidade de dados, com direito a uma padronização madura na validação dos mesmos e transformações frequentes, XML pode ser a melhor pedida. Se eles precisam de uma categorização, identificação ou classificação, os metadados são mais que indicados, sem dúvidas.

No fim, o XML não está morto: sua utilização indevida é que vai por esse caminho. Longa vida ao XML (e JSON, YAML, properties…)!

XML vs JSON

Veja também

Comentários