Vergleichen
Protocol Buffers oder JSON
Protocol Buffers definiert typisierte Nachrichten aus `.proto`-Schemata und bietet ein feldnummernbasiertes binäres Wire-Format sowie ein separates ProtoJSON-Mapping. JSON ist ein allgemeines Textformat nach RFC 8259 ohne vorausgesetztes Schema.
Welches Format sollten Sie wählen?
Wählen Sie Protobuf für RPC- oder Dienstnachrichten, wenn typisierte Verträge und Binärkompatibilität verwaltet werden. JSON eignet sich für allgemeine Textstrukturen und breite JSON-Werkzeuge.
Geeignet für Protocol-Buffers-Schema
Struktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilen
- Sprachspezifischen Code mit protoc erzeugen
- Nachrichten für RPC und die Kommunikation zwischen Diensten definieren
Geeignet für JSON
Web-APIs, Konfigurationsdateien und Datenaustausch
- Übertragen strukturierter Daten
Grundlegende Informationen
| Merkmal | Protocol-Buffers-Schema | JSON |
|---|---|---|
| Dateiendung | .proto | .json |
| MIME-Typ | text/plain | application/json |
| Häufige Verwendung | Struktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilen | Web-APIs, Konfigurationsdateien und Datenaustausch |
| Öffnen | Öffnen Sie die Datei in einem Texteditor oder einer Protocol-Buffers-fähigen IDE. Prüfen Sie Syntax und Imports, indem Sie sie mit der im Projekt verwendeten protoc-Version und Konfiguration kompilieren. | Öffnen Sie die Datei in einem Texteditor, einer IDE oder einem JSON-fähigen Viewer. |
| Exportieren oder konvertieren | Ordnen Sie beim Wechsel zu einem anderen Schemaformat Typen, Feldnummern, Standardwerte, Enum-Werte und Kompatibilitätsregeln zu. Erzeugen Sie anschließend den Code und testen Sie reale Daten. Eine Umbenennung in .json oder eine Binärdateiendung konvertiert die Datei nicht. | Anwendungen oder Konvertierungswerkzeuge können sie in Formate wie CSV umwandeln. |
Nach Einsatzzweck wählen
Sprachspezifischen Code mit protoc erzeugen
Struktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilen
Protocol-Buffers-SchemaNachrichten für RPC und die Kommunikation zwischen Diensten definieren
Struktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilen
Protocol-Buffers-SchemaÜbertragen strukturierter Daten
Web-APIs, Konfigurationsdateien und Datenaustausch
JSONWichtiger Punkt 1
Protobuf-Binärdaten hängen von `.proto`-Definition und Feldnummern ab. JSON stellt Textobjekte und Arrays ohne Schema dar; ProtoJSON bildet Protobuf-Typen nach eigenen Regeln auf JSON-Werte ab.
Unterschiede im DetailWichtiger Punkt 2
ProtoJSON bildet bytes auf Base64-Zeichenketten, int64 auf Zeichenketten, Enums auf Namen und Feldnamen auf JSON-Schlüssel ab. Das ist weder das Binär-Wire-Format noch ein beliebiges JSON Schema.
Unterschiede im DetailUnterschiede im Detail
Verwenden Sie Protobuf für typisierte Dienstverträge und kompakten Binäraustausch. Verwenden Sie JSON für allgemeine Textschnittstellen. Folgen Sie bei Protobuf-JSON-Daten ProtoJSON und setzen Sie nicht beliebige JSON-Dokumente gleich. Prüfen Sie Presence, null, Zahlenbereiche, unbekannte Felder und Schemaentwicklung.
- Zum Interpretieren von Feldnummern und Typen in Protobuf-Wire-Nachrichten ist ein passendes Schema nötig. Allgemeine JSON-Syntax verlangt keines.
- ProtoJSON hat eigene Abbildungen und Kompatibilitätsregeln, ist weniger effizient als das Binärformat und bewahrt unbekannte Felder nicht auf dieselbe Weise.
- Konvertierung kann Presence, Ganzzahlgenauigkeit, Enum-Namen, Map-Schlüssel, oneof, null und unbekannte Felder beeinflussen. Prüfen Sie reale Laufzeitbibliotheken sowie alte und neue Schemaversionen.
Häufige Fragen
Ist ProtoJSON mit jedem JSON-Dokument austauschbar?
Nein. ProtoJSON stellt nur mit Protobuf-Schema ausdrückbare Strukturen nach eigenen Regeln dar und kann weder jedes JSON Schema noch jedes Wire-Verhalten abbilden.