É racional converter protobuf em json para enviá-lo para um servidor web?

5

Protobuf é uma coisa boa, pois permite que desenvolvedores c ++ não se preocupem com serialização / desserialização de classes, é rápido e o formato .proto é muito bom. Também permite validação automática de dados. Mas as mensagens não são legíveis por humanos e, mais importante, não são fabricáveis por seres humanos. O que é um problema quando você precisa testar rapidamente a resposta para um determinado estímulo de um servidor remoto.

A solução, como me parece, é criar uma mensagem protobuf, convertê-la para json através de alguma biblioteca e enviá-la, usando a mesma biblioteca para desserializá-la para protobuf no servidor e de volta para c ++.

Parece que obtemos o melhor das duas palavras: validação de mensagem, geração automática de classe a partir de arquivos .proto e legibilidade do json. Claro que é mais lento, mas para a minha velocidade de tarefa não é essencial. Ainda assim, é sensato? Evidentemente, tenho pouco conhecimento de redes e problemas que podem surgir da abordagem descrita. Alguém pode me dizer se há problemas futuros?

    
por Zeks 18.09.2015 / 03:01
fonte

1 resposta

5

Converter Protobuf em JSON e voltar é perfeitamente viável, contanto que você possa lidar com a sobrecarga de desempenho. Eu trabalhei em um projeto onde fizemos algo assim, usando JSON como o formato preferido para chamadas de ReST para baixo desempenho, alta simpatia. A camada web convertida em Protobuf, que os serviços subjacentes usavam diretamente. Nós incluímos um tipo de conteúdo Protobuf direto para que você pudesse ignorar a codificação / decodificação JSON e usar Protobuf sobre HTTP (S).

Certos clientes de alto desempenho e privilegiados podem acessar uma interface de soquete não processada que implementou uma interface Protobuf / RPC nos mesmos serviços.

Tudo funcionou bem. Eu não acho que nenhum cliente converteu seu protobuf em JSON - mas eles poderiam ter feito; o esquema estava disponível e isso poderia ter sido usado para migração ou depuração.

EDITAR:

Como @RobertHarvey observa em seu comentário, há uma biblioteca "text formatter / parser" em protobuf, descrita aqui: link . Isso fornece:

Utilities for printing and parsing protocol messages in a human-readable, text-based format

Para maior clareza, este não é um protobuf fio protocolo (embora eu acho que poderia ser crowbarred em ser um!), Mas é um kit de ferramentas para ajudar você a trabalhar com mensagens protobuf como texto. Isso provavelmente significa que você não precisaria usar o JSON especificamente. Você poderia escrever uma ferramenta que exibisse um protobuf msg como texto, editá-lo e recodificá-lo.

    
por 06.10.2016 / 16:57
fonte