Eingabe

Ausgabe

Was ist der GraphQL-Minifier?

Wenn du ein GraphQL-Schema als Teil eines Deploy-Artefakts, eines Lambda-Bundles oder einer per CDN ausgelieferten SDL-Zeichenkette verschickst, summieren sich Beschreibungen und `#`-Kommentare schnell. Ein echtes Produktions-Schema kann gut zu 40-60 % aus Dokumentation bestehen — nützlich, wenn Menschen es lesen, totes Gewicht, sobald es übers Netz geht, um einen Client hochzufahren. Die GraphQL-Spezifikation definiert Kommentare, Block-String-Beschreibungen und die meisten Leerzeichen als ignorierte Tokens — jeder vernünftige Parser ignoriert sie ohnehin. Dieser Minifier entfernt all das und liefert ein einzeiliges SDL zurück, das aus Sicht des Parsers Byte für Byte zum Original äquivalent ist.

Der Minifier ist von Hand geschrieben — kein graphql-npm-Paket wird in die Seite geladen, der erste Paint bleibt klein. Er tokenisiert das SDL, verwirft jedes Kommentar- und Block-String-Token und gibt die strukturellen Tokens mit dem absolut minimalen Whitespace wieder aus, der nötig ist, um benachbarte name-Tokens unterscheidbar zu halten (die einzige Stelle, an der spezifikationskonformes SDL wirklich ein Leerzeichen braucht). Die Ausgabe wird vom selben leichtgewichtigen Parser geprüft, der auch im Formatter steckt, sodass der Round-Trip durch graphql-js oder Apollo Server beim Start sich genauso verhält wie mit dem Original.

Alles läuft in deinem Browser. Kein Upload, kein Schema wird irgendwo gespeichert. Einfügen, minifizieren, kopieren.

So nutzt du den GraphQL-Minifier

Drei schnelle Schritte. Die unten beschriebenen Buttons sind die tatsächlichen Buttons auf dieser Seite — es gibt keinen „Minify“-Button, weil die Minifizierung automatisch läuft.

1

Einfügen, hochladen oder Beispiel laden

Füge ein GraphQL-Schema in das linke Eingabe-Panel ein — die Minifizierung passiert einen Sekundenbruchteil nach deiner letzten Tastatureingabe automatisch, du musst also keinen Convert-Button suchen. Klicke Hochladen für eine .graphql-, .graphqls- oder .gql-Datei, oder drücke Beispiel, um ein realistisches E-Commerce-Bestellschema mit Kommentaren und Block-String-Beschreibungen zu laden, denen du beim Verschwinden zusehen kannst. Eine typische Eingabe sieht so aus:

"""An order placed by a customer."""
type Order {
  # The unique order identifier
  id: ID!
  placedAt: DateTime!
  customer: Customer!
  items: [OrderItem!]!
  status: OrderStatus!
}

Sowohl Server-Schemas (mit extend type Query) als auch eigenständige Typdefinitionen funktionieren. Die akzeptierten Formen entsprechen dem, was die GraphQL Schema Definition Language unterstützt.

2

Die minifizierte Ausgabe lesen

Das rechte Ausgabe-Panel zeigt das minifizierte SDL in einer einzigen Zeile, mit der eingesparten-Bytes-Pille im Panel-Header, damit du auf einen Blick siehst, wie viel du gespart hast. Kommentare (# ...) und Block-String-Beschreibungen ("""...""") werden vollständig entfernt — laut der Relay-GraphQL-Spezifikation haben sie keine semantische Bedeutung, und jedes introspektions-basierte Tooling holt sich Beschreibungen ohnehin aus deiner Resolver-Schicht. Wenn das SDL unausgeglichene Klammern oder einen anderen Parse-Fehler hat, zeigt der Minifier eine freundliche Inline-Meldung — er wirft nie eine Exception und stürzt nicht ab.

3

Kopieren oder herunterladen

Klick Kopieren, um das minifizierte Schema zu schnappen und in ein Deploy-Skript, eine Lambda-Umgebungsvariable oder eine Konfigurationsdatei einzufügen. Klick Herunterladen, um es als .graphql zu speichern. Der Clear-Button im Eingabepanel setzt dich auf einen leeren Zustand zurück. Die Minifizierung passiert vollständig client-seitig — dein Schema verlässt die Seite nie.

Wann du das tatsächlich brauchst

Kleinere Deploy-Artefakte

Du bündelst dein Schema in eine Serverless-Funktion oder einen Docker-Layer? Beschreibungen und Kommentare zu entfernen, halbiert die Bytezahl meist. Multipliziere das mit jedem Cold Start und jedem Layer-Download, und die Ersparnis taucht auf der Rechnung auf. Dem Runtime-Parser ist das egal — Beschreibungen sind reine Introspection-Metadaten, und die meisten Produktionsdeployments schalten Introspection ohnehin ab, gemäß der Produktionsempfehlung von Apollo Router.

Per CDN ausgelieferte Schemas

Wenn dein Gateway das SDL beim Boot von einem CDN zieht (Federation-Supergraph-Komposition, Schema-Registry-Pulls), kostet jedes Byte Latenz auf dem Cold Path. Minifiziertes SDL parst identisch und schneidet ein gutes Stück von der Drahtgröße ab — oft mehr als gzip schaffen würde, weil gzip nichts komprimieren kann, was schon weg ist.

Schemas im Quelltext einbetten

Manchmal musst du eine Schema-Zeichenkette in eine Konfigurationsdatei, eine Umgebungsvariable oder ein selbstgebautes Tool einbetten. Eine einzeilige minifizierte Version passt sauber in ein TypeScript-Template-Literal oder einen YAML-Skalar, ohne jede Zeilenumbruch-Escapes.

Diff-Rauschen reduzieren

Wenn sich zwei Schema-Revisionen nur in Beschreibungen oder Kommentaren unterscheiden, ist der eigentliche strukturelle Diff unter Doc-String-Änderungen begraben. Beide Seiten vor dem Diff zu minifizieren, isoliert den echten Schema-Delta — nützlich für Change-Management und Erkennung von Breaking Changes.

Häufige Fragen

Ist das minifizierte Schema noch gültiges GraphQL?

Ja — jedes Token, das die Spec als ignorierbar definiert (Kommentare, Beschreibungen, redundanter Whitespace, Kommas), wird entfernt, aber jeder Name, jedes Satzzeichen, jedes String-Literal und jede Zahl bleibt erhalten. Die Ausgabe parst zum exakt gleichen AST wie die Eingabe. Du kannst das verifizieren, indem du beide durch graphql-js jagst und die resultierenden Dokumente vergleichst.

Verliere ich meine Schema-Dokumentation?

Ja — genau das ist der Punkt. Beschreibungen und `#`-Kommentare werden entfernt. Halte deine nicht-minifizierte Quelle in der Versionsverwaltung und minifiziere erst, wenn du das Artefakt ausliefern willst. Dokumentation, die du Clients tatsächlich zeigen willst, lebt in deiner Introspection-Antwort, die aus den Runtime-Resolver-Metadaten generiert wird, nicht aus dem deployten SDL-String.

Wird mein Schema an einen Server gesendet?

Nein. Die Minifizierung läuft komplett in deinem Browser. Nichts wird hochgeladen, nichts geloggt. Du kannst interne oder unveröffentlichte Schemas bedenkenlos einfügen.

Wie viel kann ich erwarten zu sparen?

Hängt davon ab, wie stark dokumentiert dein Schema ist. Ein nacktes SDL ohne Beschreibungen spart 10-15 % (nur Whitespace). Ein gut dokumentiertes Schema mit Block-String-Beschreibungen an jedem Typ und Feld spart typisch 40-60 %. Die eingesparten-Bytes-Pille im Header des Ausgabepanels nennt dir die exakte Zahl für deine Eingabe.

Verarbeitet er Direktiven, Custom Scalars und Federation?

Ja. @deprecated, @key, @external, scalar DateTime und jede beliebige Custom-Direktive oder -Scalar bleiben erhalten. Der Minifier entfernt nur ignorierbare Tokens — alles Semantische bleibt. Federation-Direktiven gehen sauber durch den Round-Trip.

Wie groß darf das Schema sein?

So groß, wie dein Browser es bequem rendert. Schemas mit ein paar hundert Typen sind kein Problem. Jenseits von etwa 5 MB wird der Ace-Editor selbst träge — das ist der Engpass, nicht der Minifier.

Weitere GraphQL-Tools

Minifizieren ist nur ein Teil der Arbeit mit GraphQL. Diese Tools decken den Rest ab: