Confronta
Protocol Buffers o JSON
Protocol Buffers definisce messaggi tipizzati da schemi `.proto`, offre un wire format binario basato su numeri di campo e una mappatura ProtoJSON separata. JSON è un formato testuale generale secondo RFC 8259 e non presuppone uno schema specifico.
Quale formato scegliere?
Scegli Protobuf per messaggi RPC o tra servizi quando contratti tipizzati e compatibilità binaria sono gestiti. Scegli JSON per strutture testuali generiche e strumenti JSON diffusi.
Adatto per Schema Protocol Buffers
Definire la struttura dei messaggi Protocol Buffers · Condividere contratti dati tra linguaggi di programmazione
- Generare codice per più linguaggi con protoc
- Definire messaggi per RPC e comunicazione tra servizi
Adatto per JSON
API web, file di configurazione e scambio dati
- Trasferire dati strutturati
Informazioni di base
| Voce | Schema Protocol Buffers | JSON |
|---|---|---|
| Estensione | .proto | .json |
| Tipo MIME | text/plain | application/json |
| Usi comuni | Definire la struttura dei messaggi Protocol Buffers · Condividere contratti dati tra linguaggi di programmazione | API web, file di configurazione e scambio dati |
| Come aprire | Aprilo in un editor di testo o in un IDE compatibile con Protocol Buffers. Per verificare sintassi e import, compila il file con la versione e le impostazioni di protoc usate dal progetto. | Aprilo in un editor di testo, IDE o visualizzatore compatibile con JSON. |
| Esportare o convertire | Per passare a un altro formato di schema, associa tipi, numeri di campo, valori predefiniti, enum e regole di compatibilità. Poi genera il codice e prova dati reali. Cambiare l’estensione in .json o in un’estensione binaria non converte il file. | Applicazioni o strumenti di conversione possono convertirlo in formati come CSV. |
Scegli in base all'uso
Generare codice per più linguaggi con protoc
Definire la struttura dei messaggi Protocol Buffers · Condividere contratti dati tra linguaggi di programmazione
Schema Protocol BuffersDefinire messaggi per RPC e comunicazione tra servizi
Definire la struttura dei messaggi Protocol Buffers · Condividere contratti dati tra linguaggi di programmazione
Schema Protocol BuffersTrasferire dati strutturati
API web, file di configurazione e scambio dati
JSONPunto chiave 1
I dati wire binari Protobuf dipendono da definizione `.proto` e numeri di campo. JSON rappresenta oggetti e array testuali senza schema obbligatorio; ProtoJSON mappa i tipi Protobuf in valori JSON secondo regole proprie.
Approfondisci le differenzePunto chiave 2
ProtoJSON mappa bytes in stringhe base64, int64 in stringhe, enum nei nomi e i nomi di campo in chiavi JSON. Non è il wire binario né un JSON Schema arbitrario.
Approfondisci le differenzeApprofondisci le differenze
Usa Protobuf per contratti tipizzati tra servizi e scambio binario compatto. Usa JSON per interfacce testuali generiche. Se usi la rappresentazione JSON di Protobuf, segui ProtoJSON senza presumere equivalenza con ogni documento JSON. Verifica presence, null, intervalli numerici, campi sconosciuti ed evoluzione dello schema.
- Per interpretare numeri di campo e tipi dei messaggi wire Protobuf serve uno schema corrispondente. La sintassi JSON generale non lo richiede.
- ProtoJSON ha mappature e regole di compatibilità proprie, è meno efficiente del wire binario e non conserva i campi sconosciuti nello stesso modo.
- La conversione può influire su presence, precisione intera, nomi enum, chiavi map, oneof, null e campi sconosciuti. Convalida con librerie runtime reali e versioni vecchie e nuove dello schema.
Domande frequenti
ProtoJSON è intercambiabile con qualsiasi documento JSON?
No. ProtoJSON rappresenta schemi esprimibili in Protobuf con una mappatura specifica; non può rappresentare ogni JSON Schema né preservare ogni comportamento wire.