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 BrowserFü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.
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.
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.
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.
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.