Formatos de serialização: do hype ao hippie
Published: 2024-01-18 12:08:17

## A Necessidade Emergente de Serialização: Uma Viagem ao Passado

A história dos formatos de serialização remonta aos primórdios da computação, quando a troca eficiente de dados entre sistemas tornou-se uma demanda crescente. Com o advento da comunicação entre computadores e a necessidade de representar dados complexos de forma estruturada, os desenvolvedores se viram diante do desafio de criar métodos eficazes para serializar e desserializar informações.

## Os Primeiros Esforços e Projetos: Pioneirismo na Serialização de Dados

Nos primeiros dias da computação, a serialização não era uma preocupação proeminente, pois as interações entre sistemas eram limitadas e os dados frequentemente simples. À medida que as aplicações começaram a se tornar mais sofisticadas e a interoperabilidade entre sistemas se tornou essencial, os primeiros esforços para padronizar a representação de dados ganharam destaque.

Um marco inicial foi a ascensão de formatos como o ASN.1 (Abstract Syntax Notation One) na década de 1980, desenvolvido para descrever estruturas de dados independentes de máquina. Esse formato foi essencial em protocolos de comunicação, como o SNMP (Simple Network Management Protocol), evidenciando a necessidade de uma abordagem estruturada na representação de dados.

Na década de 1990, com o crescente uso da web, o XML (Extensible Markup Language) emergiu como uma resposta à demanda por uma linguagem de marcação que pudesse representar dados de maneira hierárquica e extensível. Sua natureza legível por humanos e máquinas o tornou amplamente adotado em serviços web e integração de sistemas.

À medida que as aplicações se tornavam mais orientadas a serviços e distribuídas, a eficiência tornou-se uma prioridade. Surgiram então formatos binários como o Protocol Buffers (protobuf), desenvolvido pelo Google, e o Apache Thrift, utilizado pelo Facebook. Essas tecnologias buscaram otimizar a serialização para melhorar o desempenho em ambientes distribuídos.

A evolução continuou com o destaque do JSON (JavaScript Object Notation) na década de 2000, oferecendo uma alternativa leve e fácil de usar em comparação com o XML. O JSON se tornou predominante em aplicações web devido à sua simplicidade e compatibilidade com várias linguagens.

No início do século XXI, o MessagePack entrou em cena como uma alternativa binária eficiente ao JSON, otimizando ainda mais o tamanho dos dados serializados. O formato YAML, com sua sintaxe limpa e amigável, também ganhou popularidade, especialmente em configurações de aplicativos e arquivos de configuração.

## A era do smartphone e o JSON

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1nt1cvdj0r8ylgsu5pch.jpeg)

O JSON ganhou imensa popularidade devido à sua simplicidade, leveza e facilidade de leitura, características essenciais para a comunicação eficiente entre sistemas web. Sua adoção generalizada nas APIs de serviços web contribuiu para a simplificação do desenvolvimento de aplicativos, especialmente no contexto dos smartphones.

Nos primórdios dos smartphones, onde os recursos de largura de banda e poder de processamento eram limitados, o JSON se destacou como uma escolha ideal para a troca de dados entre aplicativos e servidores. Sua eficiência na serialização e desserialização de informações permitiu uma experiência mais ágil para os usuários, impulsionando a evolução dos aplicativos móveis.

A capacidade do JSON de representar dados de forma estruturada e hierárquica também facilitou a criação de interfaces de usuário dinâmicas e interativas em dispositivos móveis. A portabilidade e a simplicidade do JSON desempenharam um papel crucial na revolução dos smartphones, permitindo que aplicativos acessassem e trocassem dados de maneira eficiente, independentemente do sistema operacional.

## Integração de Formatos de Serialização com Protocolos de Comunicação

Na paisagem diversificada dos formatos de serialização, observamos uma distinção crucial quanto à integração com protocolos de comunicação. Alguns formatos têm seus próprios protocolos dedicados, enquanto outros se adaptam a protocolos estabelecidos. Essa diferenciação desempenha um papel significativo na interoperabilidade e desempenho dos sistemas.

### Formatos com Protocolo Próprio:

Protocol Buffers (protobuf): Desenvolvido pelo Google, o Protocol Buffers possui seu próprio protocolo de comunicação. Esse protocolo é otimizado para a eficiente serialização e desserialização de dados, tornando-o particularmente adequado para ambientes distribuídos e comunicação interprocessual.

Apache Thrift: Similar ao protobuf, o Apache Thrift possui seu próprio protocolo. Criado pelo Facebook, o Thrift oferece suporte a diversas linguagens de programação e é projetado para facilitar a comunicação eficiente entre sistemas heterogêneos.

### Formatos Integrados a Protocolos Estabelecidos:

JSON (JavaScript Object Notation): O JSON é agnóstico em relação ao protocolo de comunicação, sendo amplamente utilizado em conjunção com protocolos estabelecidos, como HTTP. Sua simplicidade e leveza o tornam uma escolha popular para APIs RESTful em aplicações web.

XML (Extensible Markup Language): Similar ao JSON, o XML é frequentemente utilizado em conjunto com protocolos como HTTP e SOAP (Simple Object Access Protocol). Sua estrutura hierárquica e extensibilidade o tornam adequado para diversos cenários de comunicação.

MessagePack: Como um formato binário eficiente, o MessagePack é versátil e pode ser utilizado em conjunto com diferentes protocolos, adaptando-se facilmente a ambientes que requerem otimização de tamanho e desempenho.

YAML (YAML Ain't Markup Language): O YAML é comumente utilizado em configurações de aplicativos e, similar ao JSON, pode ser integrado a protocolos estabelecidos, proporcionando flexibilidade na escolha do protocolo de comunicação mais adequado ao contexto.

A escolha entre formatos com protocolo próprio e aqueles integrados a protocolos estabelecidos depende das necessidades específicas de um projeto. Enquanto formatos com protocolo próprio oferecem otimizações específicas, os integrados a protocolos estabelecidos proporcionam flexibilidade e interoperabilidade em ecossistemas variados. Essa decisão estratégica impacta diretamente na eficiência da comunicação entre sistemas e na experiência geral do usuário.

## E a grande questão. Qual o melhor???

Vamos trazer os prós e contras de cada um pois o seu uso vai depender bastante de como e onde vamos utilizar.

Prós e Contras dos Principais Formatos de Serialização e Seus Protocolos Associados

### 1. Protocol Buffers (protobuf):

#### Prós:

Eficiência: Protocol Buffers é altamente eficiente em termos de espaço e velocidade, sendo ideal para ambientes distribuídos.
Esquema Binário: O esquema binário facilita a interoperabilidade entre diferentes linguagens de programação.
Suporte a Evolução de Esquemas: Permite a evolução controlada de esquemas sem quebrar a compatibilidade.

#### Contras:

Legibilidade Limitada: O formato binário pode ser menos legível para humanos em comparação com formatos de texto como JSON ou YAML.
Curva de Aprendizado: A implementação pode ter uma curva de aprendizado mais íngreme para desenvolvedores iniciantes.

### 2. Apache Thrift:

#### Prós:

Suporte Multilinguagem: Thrift oferece suporte a diversas linguagens de programação, facilitando a interoperabilidade em sistemas heterogêneos.
Otimização de Desempenho: Projetado para oferecer bom desempenho em comunicações interprocessuais.

#### Contras:

Complexidade de Configuração: Pode exigir configuração mais complexa em comparação com formatos mais simples.
Menos Ubiquitário: Menos amplamente adotado do que alguns formatos mais populares.

### 3. JSON (JavaScript Object Notation):

#### Prós:

Simplicidade e Legibilidade: Fácil de ler e escrever, tornando-se ideal para configurações e comunicação entre sistemas.
Ampla Adoção: Ubiquitário na web, amplamente suportado em linguagens e plataformas.

#### Contras:

Ineficiência de Espaço: Menos eficiente em termos de espaço em comparação com formatos binários.
Limitações em Dados Binários Complexos: Menos adequado para dados binários complexos devido à sua natureza textual.

### 4. XML (Extensible Markup Language):

#### Prós:

Hierarquia e Extensibilidade: Adequado para representar dados hierárquicos e extensíveis.
Ampla Adoção em Integrações: Ainda utilizado em integrações de sistemas e serviços web.

#### Contras:

Verbosidade: Mais verboso e menos eficiente em termos de espaço em comparação com formatos mais recentes.
Dificuldade de Leitura: Pode ser menos legível para humanos devido à sua estrutura marcada.

### 5. MessagePack:

#### Prós:

Eficiência Binária: Altamente eficiente em termos de espaço, sendo uma alternativa compacta ao JSON.
Velocidade de Serialização e Desserialização: Rápido para processamento de dados binários.

#### Contras:

Menos Legibilidade: Menos legível para humanos em comparação com formatos de texto.
Menos Ubiquitário: Menos amplamente adotado em comparação com JSON ou XML.

### 6. YAML (YAML Ain't Markup Language):

#### Prós:

Legibilidade e Simplicidade: Sintaxe clara e fácil de entender.
Suporte a Estruturas de Dados Complexas: Pode representar estruturas de dados complexas de maneira mais intuitiva.

#### Contras:

Eficiência de Espaço: Menos eficiente em termos de espaço em comparação com formatos binários.
Menos Compatível com Alguns Serviços: Pode ser menos compatível com alguns serviços que favorecem formatos mais compactos.

Em suma, a escolha entre esses formatos de serialização e seus protocolos associados depende das necessidades específicas do projeto, considerando critérios como eficiência, legibilidade, adoção na comunidade e suporte nos principais provedores de nuvem.