È razionale convertire protobuf in json per inviarlo a un server web?

5

Protobuf è una buona cosa, permette agli sviluppatori c ++ di non preoccuparsi della serializzazione della classe / deserializzazione, è veloce e il formato .proto è molto bello. Permette anche la convalida automatica dei dati. Ma i messaggi non sono leggibili dall'uomo e, soprattutto, non sono labirintici. Questo è un problema quando è necessario testare rapidamente la risposta a determinati stimoli da un server remoto.

La soluzione, come mi sembra, è di creare un messaggio protobuf, convertirlo in json tramite una libreria e inviarlo, usando la stessa libreria per deserializzare su protobuf sul server e tornare a c ++.

Sembra che otteniamo il meglio da entrambe le parole: convalida dei messaggi, generazione automatica della classe da file .proto e leggibilità di json. Certo è più lento, ma per la mia attività la velocità non è essenziale. Eppure, è sano di mente? Devo ammettere che ho poca conoscenza del networking e dei problemi che possono derivare dall'approccio descritto. Qualcuno può dirmi se ci sono problemi futuri?

    
posta Zeks 18.09.2015 - 03:01
fonte

1 risposta

5

La conversione da Protobuf a JSON e viceversa è perfettamente funzionante, purché sia possibile gestire il sovraccarico delle prestazioni. Ho lavorato a un progetto in cui abbiamo fatto qualcosa di simile, usando JSON come formato preferito per le chiamate ReST per prestazioni inferiori e alta cordialità. Il livello web convertito in Protobuf, che i servizi sottostanti utilizzavano direttamente. Abbiamo incluso un tipo di contenuto Protobuf diretto in modo da evitare la codifica / decodifica JSON e utilizzare Protobuf su HTTP (S).

Alcuni client ad alte prestazioni con privilegi potevano accedere a un'interfaccia socket raw che implementava un'interfaccia Protobuf / RPC sugli stessi servizi.

Tutto ha funzionato bene. Non penso che nessun cliente abbia convertito il suo protobuf in JSON, ma avrebbero potuto farlo; lo schema era disponibile e avrebbe potuto essere utilizzato per la migrazione o il debug.

EDIT:

Come osserva @RobertHarvey nel suo commento, c'è una libreria "text formatter / parser" in protobuf, qui descritta: link . Questo fornisce:

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

Per chiarezza, questo non è un protocollo filo protobuf (anche se immagino possa essere usato come arma da fuoco per essere uno!), ma è un toolkit che ti aiuta a lavorare con i messaggi protobuf come testo. Probabilmente significa che non avresti bisogno di usare JSON in modo specifico. Puoi scrivere uno strumento che visualizzi un messaggio di protobuf come testo, modificalo e ricodifichi.

    
risposta data 06.10.2016 - 16:57
fonte

Leggi altre domande sui tag