O Protobuf é um padrão de serialização e desserialização de dados fornecido pelo Google (e também utilizado no gRPC). O grande destaque do Protobuf é ser mais leve e performático nas operações comparado com JSON e XML.
Os Protocol Buffers são um formato de armazenamento de dados estruturado portátil e eficiente. As mensagens são serializadas em um formato binary wire que é muito compacto, sendo extensível como protocolo de comunicação e armazenamento de dados.
Vantagens
- Processamento muito rápido
- Muito útil para comunicação entre APIs
- Fácil Interoperabilidade entre linguagens
Desvantagens
- Legibilidade não humana: JSON, trocado em formato de texto e com estrutura simples, é fácil de ser lido e analisado por humanos, porém este não é o caso do Protobuf.
- Pouco popular na comunidade.
Neste artigo, aprenderemos como configurar e utilizar o Protobuf no .NET 6.0, seguindo as boas práticas e dicas para manter o código performático.
Pré-requisitos
- Visual Studio 2022 (.NET 6.0)
- Nuget package protobuf-net
API
Na classe program.cs da API, configure conforme o código abaixo:
O próximo passo é criar a classe Person com os mapeamentos do Protobuf:
- [ProtoContract]: Indica que a classe será serializada utilizando o Protobuf.
- [ProtoMember]: Indica que a propriedade deverá ser serializada utilizando o Protobuf.
- [ProtoIgnore]: indica que a propriedade será ignorada quando uma serialização ocorrer.
Para facilitar as chamadas ao Protobuf, crie uma classe de extensão com o nome de ProtoBufExtensions e insira o seguinte código:
Em seguida, crie uma controller com o nome de ProtobufController e insira o código abaixo para testes:
Testando
Para realizar os testes, execute o endpoint POST /serialize no Swagger e verifique o resultado da coleta de logs (conforme imagem abaixo). Em seguida execute o endpoint POST /deserialize passando o texto da serialização em Protobuf para realizar a conversão para objeto C#
Finalizando
O Protobuf foi feito para ser extremamente rápido, mais leve e consequentemente mais performático do que outros protocolos. Mesmo sendo pouco popular, utilize sempre que desenvolver APIs com comunicações internas e executar serialização/desserialização.
Os detalhes completos deste exemplo você encontra no meu GitHub: https://github.com/hgmauri/sample-protobuf