DEV Community

Cover image for Desmistificando a Frase: "Aí ele serializa isso para JSON HTTP e manda pro cliente"
Felipe Cezar
Felipe Cezar

Posted on

Desmistificando a Frase: "Aí ele serializa isso para JSON HTTP e manda pro cliente"

Se você está mergulhando no desenvolvimento web, em algum momento vai ouvir de um desenvolvedor mais experiente a clássica frase: "Aí a gente pega o objeto, serializa isso para JSON, joga no HTTP e manda pro cliente." Mas o que isso significa na prática? O que exatamente é esse "isso"? Como ocorre essa "serialização" e quais são as armadilhas no meio do caminho? Vamos quebrar essa frase e entender os bastidores da comunicação na web.


1. O que é o tal do "Isso"? (O Problema da Memória)

Para entender a frase, precisamos primeiro olhar para o "isso".

O "isso" é simplesmente a variável ou o objeto que contém os dados da sua aplicação e que está "vivo" na memória RAM do seu servidor (Back-end).

Imagine que seu back-end foi escrito em Python. Você foi no banco de dados e montou o perfil de uma cliente. O "isso" é a variável perfil_cliente:

import datetime

# Esse objeto abaixo é o nosso famoso "isso".
# Ele só existe, funciona e faz sentido dentro da memória do Python.
perfil_cliente = {
    "nome": "Ana da Silva",
    "idade": 30,
    "saldo_conta": 1540.50,
    "pode_comprar": True,                      # No Python, True é com "T" maiúsculo
    "data_cadastro": datetime.date(2023, 1, 5) # Um objeto complexo nativo do Python!
}
Enter fullscreen mode Exit fullscreen mode

Qual é o problema de enviar "isso" do jeito que está?
O navegador do usuário (Front-end) pode estar rodando JavaScript, Swift (iOS) ou Kotlin (Android). Nenhuma dessas linguagens sabe o que é um objeto datetime.date do Python. Elas também não entendem que True com "T" maiúsculo é um valor booleano.

Se você tentar enviar o objeto direto da memória (os bytes crus daquele objeto Python) pelo cabo de rede, o aplicativo do usuário vai receber lixo ilegível e quebrar. Eles precisam de uma "língua franca".

2. A Solução: Serialização e o Formato JSON

Para que o Python converse com o JavaScript, usamos o JSON (JavaScript Object Notation). Ele é, essencialmente, uma grande string de texto padronizada e universal.

A Serialização é a ação de pegar aquele objeto complexo e cheio de regras locais (o "isso") e achatá-lo, transformando-o em uma simples string de texto JSON. É como desmontar um castelo de Lego e colocar as peças numa caixa com um manual de instruções, para que quem receba possa reconstruir do outro lado (o que chamamos de Desserialização).

Quem faz o trabalho sujo? (Os Métodos de Serialização)

Toda linguagem de programação moderna tem ferramentas nativas para fazer isso:

  • No Python: Usamos a biblioteca padrão json. O método principal é o json.dumps().
  • No JavaScript (Node.js/Browser): Usamos o JSON.stringify(objeto).
  • No C# (.NET): Usamos System.Text.Json.JsonSerializer.Serialize(objeto).

Hoje em dia, a maioria dos frameworks web faz isso por debaixo dos panos. Se você usa o Express.js no Node, por exemplo, o método res.json(usuarioData) já pega o objeto, roda um stringify e prepara para o envio automático.

3. O "Depois": Como fica o JSON HTTP?

Quando o servidor finalmente "joga no HTTP e manda pro cliente", o que viaja pelo cabo da internet não é o objeto, mas sim um pacote de texto purinho.

Voltando ao nosso exemplo da Ana, é exatamente isto aqui que sai do servidor em direção ao celular do cliente:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 114

{
  "nome": "Ana da Silva",
  "idade": 30,
  "saldo_conta": 1540.50,
  "pode_comprar": true,
  "data_cadastro": "2023-01-05"
}
Enter fullscreen mode Exit fullscreen mode

Repare na mágica da conversão:

  1. O Envelope HTTP: As três primeiras linhas dizem ao cliente: "Deu tudo certo (200 OK) e o conteúdo da mensagem é texto formatado em JSON".
  2. O Booleano: O True do Python virou true minúsculo (regra do JSON).
  3. A Data: O objeto complexo datetime.date foi achatado e virou uma simples string de texto "2023-01-05".

Quando o aplicativo recebe esse texto, ele faz a Desserialização (usando algo como JSON.parse() no JavaScript), transformando o texto de volta em um objeto vivo na memória do celular.

4. Onde o bicho pega? (Problemas Comuns)

A serialização não é à prova de falhas. Aqui estão os problemas que todo dev vai enfrentar:

  1. Funções e Métodos não são serializáveis: O JSON guarda dados, não comportamento. Se o seu objeto tem uma função tipo calcularIdade(), ela será completamente ignorada e removida na hora de virar JSON.
  2. Referências Circulares (O terror do Node.js): Imagine um objeto "Pessoa" que tem uma propriedade apontando para o seu "Chefe", e o "Chefe" tem uma propriedade apontando de volta para a "Pessoa". Quando o serializador tenta transformar isso em texto, ele entra num loop infinito e sua aplicação quebra (o famoso erro TypeError: Converting circular structure to JSON).
  3. Perda de precisão e Datas: O JSON não tem um tipo nativo para "Data". Tudo vira texto. O cliente precisa saber que aquela string "2023-01-05" deve ser convertida para data novamente. Além disso, números incrivelmente grandes (BigInt) podem perder precisão dependendo de como a linguagem de destino os lê.

5. Dá para mandar sem serializar?

Sim! Nem toda resposta HTTP precisa ser JSON. Se você não serializar, você está mandando os dados "crus" ou em outros formatos, e isso é perfeito dependendo do caso:

  • Arquivos e Imagens: Se o cliente pede a foto de perfil do usuário, o servidor não transforma a foto em JSON. Ele simplesmente envia os bytes binários da imagem pela rede e avisa no cabeçalho: Content-Type: image/jpeg.
  • Páginas Web Clássicas: Quando você acessa um site, o servidor envia texto em formato HTML puro (Content-Type: text/html). O navegador sabe ler isso nativamente para renderizar a página.
  • Texto Plano: Você pode simplesmente retornar uma string solta com Content-Type: text/plain.

O JSON entra em cena especificamente quando precisamos trafegar dados estruturados (listas, dicionários, atributos) entre sistemas que falam "idiomas" diferentes.

Resumo da Ópera

Quando dizemos "serializa isso para JSON HTTP", estamos falando do processo universal de sobrevivência dos dados na web: pegar uma estrutura complexa em uma linguagem, traduzi-la para um texto universal (JSON), empacotá-la em um envelope de transporte (HTTP) e despachá-la para o destino. Entender esse ciclo é o primeiro grande passo para dominar o desenvolvimento de APIs!

Top comments (0)