CoderTools

Protocol Buffers-Werkzeug

Protocol Buffers-Nachrichten codieren, decodieren und validieren

Proto Schema

Beispiel-Schemas:

Eingabe

Schema parsen und Nachrichtentyp auswählen, um Formularfelder zu generieren

Ausgabe

Protocol Buffers Dokumentation

Was ist Protocol Buffers?

Protocol Buffers (Protobuf) ist ein sprachneutraler, plattformunabhängiger erweiterbarer Mechanismus zum Serialisieren strukturierter Daten, entwickelt von Google. Es ist kleiner, schneller und einfacher als XML und JSON für die Datenserialisierung.

Hauptmerkmale

  • Sprachneutral und plattformunabhängig
  • Kleiner und schneller als XML/JSON
  • Starke Typisierung mit Schema-Definition
  • Rückwärts- und Vorwärtskompatibilität
  • Automatische Code-Generierung
  • Effiziente binäre Codierung

Verwendung dieses Tools

  1. Geben Sie Ihre .proto Schema-Definition im Schema-Editor ein
  2. Klicken Sie auf 'Schema Parsen', um das Schema zu validieren und zu parsen
  3. Wählen Sie den Nachrichtentyp aus, mit dem Sie arbeiten möchten
  4. Zum Codieren: Geben Sie JSON-Daten ein und klicken Sie auf 'Codieren'
  5. Zum Decodieren: Geben Sie Binärdaten ein und klicken Sie auf 'Decodieren'
  6. Verwenden Sie Raw Decodierung, um Binärdaten ohne Schema zu analysieren

Tool-Funktionen

Codieren

Konvertieren Sie JSON-Daten in das binäre Protocol Buffers Format. Unterstützt formularbasierte Eingabe für einfache Dateneingabe mit Typvalidierung.

Decodieren

Konvertieren Sie Protocol Buffers Binärdaten zurück in lesbares JSON-Format. Unterstützt Base64-, Hex- und C-Stil-Hex-Eingabeformate.

Raw Decodierung

Analysieren Sie Protobuf-Binärdaten ohne Schema. Nützlich für Debugging, Reverse Engineering oder die Analyse unbekannter Nachrichten.

Formular-Eingabe

Benutzerfreundliche Formularoberfläche, die Eingabeformulare basierend auf Ihrem Schema generiert. Unterstützt verschachtelte Nachrichten, Enums und wiederholte Felder.

Proto Syntax Referenz

Protocol Buffers verwendet eine einfache Syntax zur Definition von Nachrichtentypen:

syntax = "proto3";

message Person {
    string name = 1;
    int32 id = 2;
    string email = 3;
    
    enum PhoneType {
        MOBILE = 0;
        HOME = 1;
        WORK = 2;
    }
    
    message PhoneNumber {
        string number = 1;
        PhoneType type = 2;
    }
    
    repeated PhoneNumber phones = 4;
}
  • syntax: Gibt die Protobuf-Version an (proto2 oder proto3)
  • message: Definiert einen Nachrichtentyp mit Feldern
  • field: Jedes Feld hat einen Typ, Namen und eine eindeutige Nummer
  • enum: Definiert Aufzählungstypen
  • repeated: Markiert ein Feld als wiederholt (Array/Liste)
  • optional: Markiert ein Feld als optional (proto3)

Skalare Typen

Protocol Buffers unterstützt verschiedene skalare Typen:

Typ Beschreibung Standard
int32, int64Vorzeichenbehaftete Ganzzahlen (variable Länge)0
uint32, uint64Vorzeichenlose Ganzzahlen0
sint32, sint64Vorzeichenbehaftete Ganzzahlen mit ZigZag-Codierung (effizient für negative Zahlen)0
fixed32, fixed64Ganzzahlen mit fester Breite (4 oder 8 Bytes, vorzeichenlos)0
sfixed32, sfixed64Ganzzahlen mit fester Breite (4 oder 8 Bytes, vorzeichenbehaftet)0
float, doubleGleitkommazahlen (32 oder 64 Bit)0.0
boolBoolesche Werte (wahr/falsch)false
stringUTF-8 kodierte Textzeichenfolgen""
bytesBeliebige Binärdatenempty

Wire Typen

Protobuf verwendet Wire-Typen, um zu bestimmen, wie Werte aus Binärdaten gelesen werden:

Wire Typ Bedeutung Verwendet für
0Varintint32, int64, uint32, uint64, sint32, sint64, bool, enum
164-bitfixed64, sfixed64, double
2Length-delimitedstring, bytes, embedded messages, packed repeated
532-bitfixed32, sfixed32, float

Best Practices

  • Verwenden Sie proto3-Syntax für neue Projekte - sie ist einfacher und breiter unterstützt
  • Halten Sie Feldnummern stabil - verwenden Sie niemals Nummern für bestehende Felder wieder oder ändern Sie diese
  • Verwenden Sie aussagekräftige Feldnamen, die die Daten klar beschreiben
  • Reservieren Sie Feldnummern 1-15 für häufig verwendete Felder (sie verwenden 1 Byte)
  • Verwenden Sie das 'repeated' Schlüsselwort für Arrays/Listen von Werten
  • Definieren Sie Enums für Felder mit einem festen Satz möglicher Werte

FAQ

Was ist der Unterschied zwischen proto2 und proto3?

Proto3 vereinfacht die Syntax durch das Entfernen erforderlicher Felder - alle Felder sind standardmäßig optional. Es ändert auch Standardwerte und entfernt die Feldpräsenzerkennung für skalare Typen. Proto3 wird für neue Projekte empfohlen.

Kann ich Protobuf ohne Schema decodieren?

Ja! Verwenden Sie die 'Raw Decodierungs'-Funktion, um Binärdaten ohne Schema zu analysieren. Feldnamen werden als Nummern angezeigt (field_1, field_2, usw.) und einige Typinformationen können mehrdeutig sein.

Warum unterscheiden sich meine codierten Daten von den erwarteten?

Protobuf-Codierung ist deterministisch, aber Standardwerte (0, false, leere Strings) werden in proto3 normalerweise nicht codiert, um Platz zu sparen. Außerdem beeinflusst die Reihenfolge der Felder in JSON die binäre Codierung nicht.

Wie gehe ich mit verschachtelten Nachrichten um?

Definieren Sie verschachtelte Nachrichten in Ihrem Schema und verwenden Sie verschachtelte JSON-Objekte. Im Formularmodus klicken Sie auf die Schaltfläche für verschachtelte Felder, um einen Dialog zum Bearbeiten verschachtelter Daten zu öffnen.

Häufige Anwendungsfälle

  • Inter-Service-Kommunikation in Microservices (gRPC)
  • Datenspeicherung und Caching
  • Konfigurationsdateien
  • Netzwerkprotokolle und APIs

Referenzen