Protocol-Buffers-Verträge

Protobuf Formatter

Eine eigenständige proto3-Definition als Strukturbaum, formatierten Quelltext oder JSON-Datenform untersuchen. Die Feldnummern bleiben erhalten.

Protobuf Formatter

Proto3-Quelltext

Ergebnis

    Der Quelltext bleibt im Browser. Imports werden nicht geladen; es entstehen keine Netzwerkanfragen.

    Optionen

    Unterstützter proto3-Umfang für eine Datei. Keine Imports, eigenen Optionen, Kompilierung oder Kompatibilitätsprüfung. Quelltextänderungen setzen die Wurzelauswahl zurück.

    Grenzen: 100.000 UTF-16-Zeichen, 20.000 Tokens, 2.000 Deklarationen, 32 Ebenen; Zeitlimit 8 Sekunden.

    Ergebnis veraltet. Export ist gesperrt.

    Ein Protobuf Formatter ist beim Review hilfreich, wenn uneinheitliche Einrückungen die eigentliche Änderung verdecken. Doch auch sauber formatierter Quelltext kann reservierte Feldnummern oder unbekannte Typen enthalten. Deshalb laufen die unterstützten Strukturprüfungen vor dem Export.

    Der Baum zeigt die ursprünglichen Namen und die vollständig aufgelösten Typverweise. JSON Schema beschreibt dagegen eine mögliche Datenform der ausgewählten Nachricht. Für Dienstdefinitionen, frühere Feldnummern und das Verhalten generierter Klassen bleibt der ursprüngliche Vertrag maßgeblich.

    Warum diesen Protobuf Formatter nutzen?

    Verweise bleiben eindeutig

    Der Protobuf Formatter zeigt verschachtelte Typen mit ihrem vollständigen Namen. OuterA.Item und OuterB.Item bleiben getrennt, obwohl der letzte Namensbestandteil identisch ist. Rekursive Verweise werden als Pfad dargestellt und nicht endlos als weitere Unterbäume aufgeklappt.

    Ein Quelldokument führt zu einem verzweigten Baum mit getrennten verschachtelten Nachrichten.

    Die richtige Nachricht als Ausgangspunkt

    Wählen Sie die Wurzelnachricht vor dem Export. Das Ergebnis verweist per $ref auf die passende Definition; gemeinsame Typen liegen in $defs. So lassen sich Arrays, Maps und alternative Kontaktfelder prüfen, ohne dieselbe Nachricht mehrfach in die Ausgabe einzubetten.

    Zwei ähnliche verschachtelte Typen führen zu eigenständigen Schema-Definitionen.

    Drei Hinweise für ein verlässliches Review

    01

    Die Wurzel ist eine Nachricht

    Standardmäßig wird die erste message-Deklaration gewählt, nicht der Paketname oder ein Dienst. Die Auswahl zeigt vollständige Namen. Beim Bearbeiten des Quelltexts wird sie zurückgesetzt, damit ein gelöschter Typ nicht unbemerkt als alte Auswahl erhalten bleibt.

    02

    Ansicht und Export unterscheiden

    Der Baum lässt sich auf- und zuklappen. Über die Zeilennummer springen Sie zur Deklaration im Editor. Angezeigt werden jeweils 50 sichtbare Einträge; der Strukturexport enthält trotzdem alle Deklarationen, auch zugeklappte und noch nicht eingeblendete.

    03

    Aktualität kontrollieren

    Die automatische Prüfung wartet nach Änderungen 350 ms. Ohne Automatik stehen Hauptschaltfläche und Ctrl/Cmd + Enter bereit. Änderungen sperren sofort den Export alter Ergebnisse. Beispiel und Leeren zeigen zuerst eine Ersetzungsvorschau; Rückgängig stellt Eingabe und Ergebnis gemeinsam wieder her.

    Vom Quelltext zur überprüfbaren Struktur

    proto-Dateien formatieren, Tags bewahren

    Wählen Sie zwei oder vier Leerzeichen. Kommentare und Zeichenketten behalten ihren Inhalt; Klammern darin werden nicht als Blockgrenzen interpretiert. Namen, Nummern und Reihenfolge der Felder ändern sich nicht. Die Ausgabe steht separat und wird erneut geparst, um den ursprünglichen Deskriptor mit dem formatierten zu vergleichen.

    Nummern und Reservierungen kontrollieren

    Feldnummern müssen innerhalb einer Nachricht eindeutig sein. Der Bereich 19000–19999 ist ausgeschlossen. Auch später notierte reserved-Deklarationen werden berücksichtigt. Bei Enums muss die erste Deklaration den Wert null haben; gleiche Zahlenwerte brauchen allow_alias. Das prüft den aktuellen Stand, keine früheren Versionen.

    Das Protobuf Schema als Baum lesen

    Paket, Nachrichten, Enums, oneof-Gruppen, Dienste und RPCs werden gemeinsam sichtbar. Vorwärtsverweise und rekursive Typen lösen sich innerhalb derselben Datei auf. Unbekannte Typen führen zum Abbruch. Der Baum behält snake_case-Feldnamen bei, selbst wenn die JSON-Ausgabe lowerCamelCase verwendet.

    Eine begrenzte JSON Schema-Abbildung

    Die Ausgabe nutzt Draft 2020-12 und vollständige Namen in $defs. repeated wird zum Array, map zum Objekt und int64 zur Zeichenkette. Eine oneof-Gruppe erlaubt kein oder genau ein vorhandenes Mitglied. Normale und ausdrücklich optionale Felder dürfen fehlen; required wird nicht automatisch ergänzt.

    Umfang, Grenzen und ausgelassene Informationen

    Eine explizite proto3-Datei
    Die erste Deklaration muss syntax = "proto3"; sein. Proto2, Editions, required, group und extensions gehören nicht zum unterstützten Umfang. Alle Imports werden abgewiesen, auch Timestamp und Any. Für Definitionen mit Abhängigkeiten braucht die Prüfung die vollständige Dateistruktur des Projekts.
    Nur bekannte Standardoptionen
    Übliche dateiweite Optionen zur Codegenerierung sowie passende Verwendungen von json_name, packed, deprecated und allow_alias werden akzeptiert. Eigene und aggregierte Optionen, Validierungsannotationen und CEL sind ausgeschlossen. Erhaltene Generierungsoptionen erzeugen keine zusätzlichen fachlichen Schema-Regeln.
    Keine Gleichwertigkeit zum Laufzeitparser
    Die Abbildung erfasst übliche ProtoJSON-Ausgaben. Null als nicht gesetzter Wert, numerische Enums und großzügig akzeptierte Zahlenschreibweisen sind nicht vollständig abgebildet. Stringmuster prüfen nicht den ganzen 64-Bit-Wertebereich; contentEncoding für Base64 ist eine Annotation. Ergänzen Sie nötige Validierungsregeln im Projekt.
    Keine Reparatur des Vertrags
    Felder werden weder neu nummeriert noch umbenannt, Reservierungen nicht gelöscht. Eine aktuelle Datei verrät nicht, welche Tags früher verwendet wurden. Kompilierung mit protoc, Buf lint, Kompatibilitätsprüfung, Clientcode und OpenAPI-Generierung gehören deshalb in die Projektwerkzeuge.
    Begrenzte Ressourcen pro Durchlauf
    Zulässig sind 100.000 UTF-16-Zeichen, 20.000 Tokens, 2.000 Deklarationen und 32 Verschachtelungsebenen. Ergebnisse sind auf 1.000.000 Zeichen begrenzt; der Worker endet nach acht Sekunden. Zu große Eingaben liefern einen Fehler statt eines still gekürzten Schemas.
    Definitionen statt Nutzdaten
    Die Eingabe erwartet .proto-Deklarationen. Binärdaten, Base64-Nachrichten und TextFormat werden nicht dekodiert. Die Rückrichtung von JSON Schema zu Protobuf, Stapeldateien, URL-Imports und Quelltext enthaltende Freigabelinks sind nicht verfügbar.

    Fragen zum Protobuf Formatter

    Dürfen Feldnummern bei null beginnen?

    Nein. Nachrichtentags beginnen bei 1 und reichen bis 536870911; zusätzlich sind 19000–19999 für die Implementierung reserviert. Enum-Werte haben eine andere Rolle: Die erste proto3-Enum-Deklaration muss den Wert null besitzen. Das Werkzeug prüft diese Regeln getrennt, damit die gültige Enum-Null nicht mit einem ungültigen Feldtag verwechselt wird.

    Darf ich Lücken zwischen Feldnummern lassen?

    Ja. Nummern müssen nicht fortlaufend sein. Auf Feld 1 darf Feld 20 folgen, sofern kein Konflikt besteht. Formatieren schließt solche Lücken nicht. Soll eine früher verwendete Nummer dauerhaft ausgeschlossen werden, tragen Sie sie unter reserved ein. Eine bloße Lücke dokumentiert diesen früheren Einsatz nicht.

    Wie wird ein optionales Feld in proto3 definiert?

    Mit optional vor dem Typ aktivieren Sie explizite Anwesenheitsinformation für generierten Code. Der Baum zeigt diese Deklaration. Im JSON-Schema-Ergebnis dürfen sowohl normale einzelne Felder als auch optionale Felder fehlen. Die generierte has-Methode und das Zurückgeben eines Standardwerts bilden sich darin nicht ab.

    Warum erscheint int64 in JSON als Zeichenkette?

    JavaScript-Zahlen können nicht alle 64-Bit-Ganzzahlen exakt darstellen. Übliche ProtoJSON-Ausgaben verwenden daher Dezimalzeichenketten. Diese Form bleibt in der Abbildung erhalten, ohne Umwandlung in Number. Das Muster prüft die Schreibweise; den exakten signed- oder unsigned-Wertebereich müssen Sie bei Bedarf zusätzlich validieren.

    Warum scheitert ein Import trotz richtigem Pfad?

    Ein Compiler sucht Abhängigkeiten relativ zu seinen konfigurierten Importverzeichnissen. Dieses Werkzeug hat keine Dateistruktur und lehnt deshalb jeden Import ausdrücklich ab. Prüfen Sie das vollständige Projekt mit protoc oder Buf. Der Pfad wird weder im Netzwerk geladen noch übersprungen, um ein scheinbar vollständiges Ergebnis zu erzeugen.

    Eine unterstützte Definition bereitet Probleme?

    Den nächsten Vertrag prüfen

    Mit dem Protobuf Formatter prüfen Sie unterstützte Deklarationen und nehmen die ausgewählte JSON-Datenform zurück ins Projekt. Die abschließende Kompilierung benötigt weiterhin alle Abhängigkeiten.