Protobuf- und gRPC-Inspektor

Fügen Sie eine Protocol-Buffers-Definition ein und prüfen Sie erkannte Felder und RPC-Signaturen. Das Ergebnis ist eine Übersicht, kein kompilierter Client.

Läuft lokal in deinem Browser
Dieses Werkzeug verarbeitet alle Daten lokal in deinem Browser.
.proto-DefinitionFügen Sie eine Protocol-Buffers-Definition ein, um Nachrichten, Enums, Felder mit ihren Tags, gRPC-Methoden und ein strukturelles JSON-Beispiel aufzulisten.
Nachrichten, Enums und Dienste

So lesen Sie eine .proto-Datei im Browser

Fügen Sie eine Protocol-Buffers-Definition ein und drücken Sie Lokal prüfen: Die Seite listet auf, was sie aus dem Text lesen kann — Syntaxzeile, Paket, jede Nachricht mit ihren Feldern in Dateireihenfolge, Enums mit ihren Werten, oneof-Gruppen und gRPC-Dienste mit ihren Methoden, Streaming-Aufrufe als solche gekennzeichnet. Für die erste Nachricht der Datei entsteht ein strukturelles JSON-Beispiel. Kompiliert und hochgeladen wird nichts: kein protoc, kein gRPC-Aufruf, kein Server-Roundtrip.

Der Scanner liest proto2 und proto3 auf dieselbe Weise, per Mustererkennung, und gibt deshalb wieder, was dasteht, nicht was protoc daraus machen würde. Mit geöffnetem Netzwerk-Panel erzeugt das Prüfen einer Definition keine einzige Anfrage; Übersicht, Zähler und Tabelle entstehen im Tab.

  1. Fügen Sie Ihre Definition in das Feld ein, oder laden Sie mit Beispiel laden die mitgelieferte Datei: eine Nachricht User mit drei Feldern und ein Dienst Users mit einem RPC — die Zähler melden 1 messages, 0 enums, 1 services und 4 fields / RPCs.
  2. Drücken Sie Lokal prüfen und lesen Sie die Protokollübersicht von oben: syntax = "proto3", der Paketname, danach jede Nachricht mit ihren Feldern im Wortlaut — map<string, string> metadata = 4;, optional string idempotency_key = 11; und alle Feldoptionen, unverändert übernommen.
  3. Prüfen Sie die Tabelle darunter. Jedes Feld, jedes Enum und jeder RPC bekommt eine Zeile: ein Map-Feld steht als map<string, string> · tag 4, eine verschachtelte Nachricht erscheint unter ihrem punktierten Namen wie Wrapper.Inner, und eine Streaming-Methode als WatchRequest → stream CaptureResponse.
  4. Mit Kopieren landet die gesamte Übersicht in der Zwischenablage — der Textblock wird unverändert kopiert, vom Tastendruck bis zum Einfügen geprüft —, mit Leeren verschwinden Feldinhalt, Übersicht, Zähler und Tabelle auf einmal.

Was die Übersicht zeigt — und was der Scanner bewusst auslässt

Das JSON-Beispiel folgt der proto3-Zuordnung

Die Werte sind so typisiert, wie proto3 JSON sie kodiert: ein String-Feld erhält "example", int64 und uint64 werden zur Zeichenkette "0", bytes wird zu "base64-data", bool zu true, ein repeated-Feld ist ein Array mit einem Element. Ein Map-Feld wird zu einem Objekt mit einem Platzhalterschlüssel, ein Nachrichtenfeld zu einem eigenen verschachtelten Objekt.

Ein Enum-Feld übernimmt den ersten im Enum deklarierten Wert, ein Currency-Feld wird also "CURRENCY_UNSPECIFIED" statt einer Zahl. Eine Nachricht, die sich selbst referenziert, endet in einem leeren Objekt und bleibt damit endlich; ein Beispiel bekommt nur die erste Nachricht der Datei — stellen Sie den gewünschten Payload-Typ nach oben, wenn Sie ihn sehen wollen.

Feldtypen, die von anderswo kommen

Ist ein Feldtyp im eingefügten Text nicht deklariert — google.protobuf.Timestamp etwa, oder eine Nachricht aus einem Import —, zeigt das Beispiel ein leeres Objekt und das Panel ergänzt einen Hinweis wie „1 field type(s) come from imported or external definitions”. Der Typname selbst steht weiterhin in der Übersicht und in der Tabelle.

Die importierte Datei wird nie geladen: Eine import-Zeile ändert nichts an der Ausgabe, und es verlässt keine Anfrage die Seite. Nehmen Sie das Beispiel als strukturelle Skizze zum Abgleich mit dem echten Schema, nicht als Payload, den Sie unverändert an einen Server schicken können.

Was der Scanner liest und was er auslässt

Kommentare werden übersprungen, sowohl // als auch /* */, und Zeichen in einem String-Literal werden nicht ausgewertet, sodass ein Standardwert wie [default = "{"] korrekt gelesen wird. Eine verschachtelte Nachricht wird zu einem eigenen Eintrag mit punktiertem Namen, und die äußere Nachricht listet nur die direkt in ihr deklarierten Felder.

Einige Zeilen bleiben absichtlich außen vor: reserved-Anweisungen, extension-Bereiche, Dateioptionen wie option java_package = "com.acme"; und import-Zeilen. Sie tauchen weder in der Übersicht noch in der Tabelle noch in den Zählern auf — die Ausgabe beschreibt nur Nachrichten, Enums, Felder und RPCs.

Fehler, Grenzen und Verhalten bei großen Dateien

Text ohne Deklaration einer Nachricht, eines Enums oder Dienstes endet mit „No message, enum or service declaration was found in this .proto text.”, ein nicht geschlossener Block mit dem Blocknamen, etwa „Unclosed message block: User”. Die Mustererkennung bedeutet zugleich: keine Prüfung auf protoc-Niveau — eine doppelte Feldnummer, Tag 0 und ein Tag im reservierten Bereich 19000–19999 werden ohne Widerspruch aufgelistet.

Die Ausgabe listet alles Gefundene und wächst daher mit der Datei: 305 KB mit 600 Nachrichten ergaben 12.200 Zeilen in rund einer Drittelsekunde, 1,5 MB mit 3.000 Nachrichten und 60.200 Zeilen waren in Chrome in unter zwei Sekunden fertig. Eine Enum-Zeile in der Tabelle zeigt die ersten 12 Werte und dann Auslassungspunkte, die Übersicht druckt sie alle.

Zuletzt verwendet: