Veja nesse artigo o que é o formato MessagePack de serialização através de um exemplo prático utilizando dois serviços, um em .NET e um outro em Node.js
Dando continuidade a minha serie de artigos sobre dicas de desenvolvimento, hoje abordarei o MessagePack.
Bom, antes de explorarmos o que é o MessagePack, é útil entendermos o JSON (JavaScript Object Notation).
O JSON é um formato de dados bastante comum e amplamente utilizado para estruturar e trocar informações entre sistemas.
A seguir você você tem um exemplo de JSON:
{
"nome": "Thiago S Adriano",
"idade": 38,
"cidade": "São Paulo"
}
Neste exemplo, temos um objeto JSON que descreve informações sobre uma pessoa, incluindo seu nome, idade e cidade.
O JSON é legível por humanos e fácil de entender, o que o torna uma escolha popular para configurações, comunicações entre serviços da web e armazenamento de dados.
Agora, vamos abordar o MessagePack.
O MessagePack é um outro formato de serialização de dados, semelhante ao JSON, mas projetado para ser mais eficiente em termos de espaço e velocidade de codificação/decodificação.
Ao contrário do JSON, o MessagePack é binário, o que significa que não é facilmente legível por humanos, mas é muito compacto e rápido para processar em máquinas.
A seguir você tem o mesmo exemplo anterior que estava com JSON, mas neste exemplo serializado com o formato MessagePack:
\x83\xa4nome\xafThiago S Adriano\xa4idade&\xa8cidade\xa9São Paulo
Conforme você pode notar, esse formato não é facilmente legível, tanto para nós, seres humanos, quanto para os navegadores. Caso você tente abrir um endpoint que esta retornando um valor serializado com o messagepack, ele vai retornar um arquivo.
Bom, depois dessa rápida introdução, vejamos um exemplo prático demonstrando a comunicação entre dois serviços, um em Node.js retornando dados de uma pessoa e um outro em .NET lendo esses dados.
Para pular a etapa de criação de um novo projeto, eu subi a versão final dos projetos desenvolvidos para este artigo no meu Github.
Caso tenha interesse em clonar eles, segue o seu link abaixo
Vamos explorar os dois projetos.
Iniciando pelo projeto desenvolvido em node.js, nós temos apenas um arquivo chamado index.js com o seguinte trecho de código:
const express = require('express');
const msgpack = require('msgpack-lite');
const app = express();
const port = 3000;
app.use(express.json());
// Rota de exemplo que retorna dados em formato MessagePack
app.get('/', (req, res) => {
const data = {
nome: "Thiago S Adriano",
idade: 38,
cidade: "São Paulo"
};
// Codifica os dados em formato MessagePack
const encodedData = msgpack.encode(data);
// Define os cabeçalhos de resposta para indicar que estamos enviando dados MessagePack
res.setHeader('Content-Type', 'application/msgpack');
res.setHeader('Content-Disposition', 'inline; filename=data.msgpack');
// Envie os dados MessagePack como resposta
res.send(encodedData);
});
app.listen(port, () => {
console.log(`Servidor rodando na porta ${port}`);
});
Analisando este código nós temos um api node.js com express que esta retornando os dados serializados utilizando o pacote msgpack-lite.
Agora avançando para o projeto .NET, nós temos uma classe chamada Pessoacom as anotations da biblioteca MessagePack:
[MessagePackObject]
public class Pessoa
{
[Key("nome")]
public string Nome { get; set; }
[Key("idade")]
public int Idade { get; set; }
[Key("cidade")]
public string Cidade { get; set; }
}
Em seguida nós temos uma requisição simples utilizando o HttpClient deserializando os dados com a biblioteca MessagePack.
Para que você possa ver como ficou a comunicação entre os dois serviços eu gravei um vídeo rápido:
Nesse exemplo estou demonstrando como o projeto .NET recebeu os dados da API desenvolvida em Node.js, em seguida estou serializando ele novamente e convertendo para JSON.
Este foi um exemplo simples, mas acredito que deu para passar como podemos utilizar esse formato de serialização nos nossos microsserviços e como utilizando ele podemos ter mais performance no momento de trafegar estes dados.
Bom, espero que tenham gostado e até um próximo artigo pessoal 🙂
*O conteúdo deste artigo é de responsabilidade do(a) autor(a) e não reflete necessariamente a opinião do iMasters.