Minifieur GraphQL
Supprimez les commentaires, descriptions et espaces d'un schéma GraphQL pour expédier le SDL le plus léger possible
Entrée
Sortie
Qu'est-ce que le minifieur GraphQL ?
Quand vous expédiez un schéma GraphQL dans un artefact de déploiement, un bundle Lambda ou une chaîne SDL servie via CDN, les descriptions et les commentaires `#` s'accumulent vite. Un schéma de production réel peut facilement contenir 40 à 60 % de documentation en octets — utile pour les humains qui le lisent, du poids mort quand il transite sur le réseau pour amorcer un client. La spécification GraphQL définit les commentaires, les descriptions en bloc et la majorité des espaces comme des tokens ignorés, ce qui veut dire que tout parseur raisonnable les ignore de toute façon. Ce minifieur supprime tout ça et renvoie un SDL sur une seule ligne, équivalent octet pour octet à l'original du point de vue du parseur.
Le minifieur est écrit à la main — aucun paquet npm graphql n'est chargé dans la page, ce qui garde le premier rendu léger. Il tokenise le SDL, supprime chaque commentaire et chaque token de chaîne en bloc, puis ré-émet les tokens structurels avec le minimum absolu d'espaces nécessaires pour garder distincts les tokens name adjacents (le seul endroit où un SDL conforme à la spec a réellement besoin d'un espace). La sortie est vérifiée par le même parseur léger utilisé dans le formateur, donc le passage par graphql-js ou Apollo Server au démarrage se comporte exactement comme avec l'original.
Tout tourne dans votre navigateur. Pas d'envoi, aucun schéma stocké quelque part. Coller, minifier, copier.
Comment utiliser le minifieur GraphQL
Trois étapes rapides. Les boutons décrits ci-dessous sont les vrais boutons de cette page — il n'y a pas de bouton Minifier car la minification se déclenche toute seule.
Coller, importer ou charger un exemple
Collez un schéma GraphQL dans le panneau Entrée à gauche — la minification se déclenche automatiquement une fraction de seconde après que vous avez arrêté de taper, donc pas de bouton Convertir à chercher. Cliquez sur Importer pour un fichier .graphql, .graphqls ou .gql, ou cliquez sur Exemple pour charger un schéma de commande e-commerce réaliste avec commentaires et descriptions en bloc que vous verrez disparaître. Une entrée typique ressemble à ceci :
"""An order placed by a customer."""
type Order {
# The unique order identifier
id: ID!
placedAt: DateTime!
customer: Customer!
items: [OrderItem!]!
status: OrderStatus!
}Les schémas style serveur (avec extend type Query) et les définitions de types autonomes fonctionnent tous les deux. Les formes acceptées correspondent à ce que prend en charge le langage de définition de schéma GraphQL.
Lire la sortie minifiée
Le panneau Sortie à droite affiche le SDL minifié sur une seule ligne, avec la pastille des octets économisés dans l'en-tête du panneau pour voir d'un coup d'œil ce que vous avez gagné. Les commentaires (# ...) et les descriptions en bloc ("""...""") sont entièrement supprimés — ils n'ont aucune sémantique selon la spécification GraphQL de Relay, et tout outillage basé sur l'introspection récupérera de toute façon les descriptions depuis votre couche de resolvers. Si le SDL a des accolades non équilibrées ou toute autre erreur de parsing, le minifieur affiche un message clair inline — il ne lance jamais d'exception et ne plante pas.
Copier ou télécharger
Cliquez sur Copier pour récupérer le schéma minifié et l'inliner dans un script de déploiement, une variable d'environnement Lambda ou un fichier de config. Cliquez sur Télécharger pour l'enregistrer en .graphql. Le bouton effacer du panneau d'entrée vous remet à zéro. La minification se passe entièrement côté client — votre schéma ne quitte jamais la page.
Quand l'utiliser concrètement
Artefacts de déploiement plus légers
Vous embarquez votre schéma dans une fonction serverless ou une couche Docker ? Supprimer les descriptions et commentaires divise généralement la taille par deux. Multipliez ça par chaque cold start et chaque téléchargement de couche et l'économie se voit sur la facture. Le parseur runtime s'en fiche — les descriptions sont des métadonnées d'introspection uniquement, et la plupart des déploiements de production désactivent l'introspection de toute façon, suivant la recommandation production d'Apollo Router.
Schémas servis par CDN
Si votre gateway récupère le SDL depuis un CDN au démarrage (composition de supergraphe Federation, fetch depuis un schema registry), chaque octet coûte de la latence sur le chemin froid. Un SDL minifié se parse à l'identique et fait gagner pas mal de poids sur le câble — souvent plus que ce que ferait gzip, parce que gzip ne peut pas compresser ce qui n'est plus là.
Incruster un schéma dans le code source
Parfois il faut inliner un schéma sous forme de chaîne dans un fichier de configuration, une variable d'environnement ou un outil maison. Une version minifiée sur une seule ligne s'insère proprement dans un template literal TypeScript ou un scalaire YAML sans avoir à échapper chaque saut de ligne.
Réduire le bruit dans les diffs
Quand deux révisions d'un schéma ne diffèrent que par les descriptions ou les commentaires, le vrai diff structurel est enterré sous les changements de docstring. Minifier les deux côtés avant de faire le diff isole le vrai delta du schéma, ce qui est utile pour la gestion des changements et la détection des breaking changes.
Questions fréquentes
Le schéma minifié reste-t-il du GraphQL valide ?
Oui — tous les tokens que la spec définit comme ignorables (commentaires, descriptions, espaces redondants, virgules) sont supprimés, mais tous les noms, ponctuations, littéraux de chaîne et nombres sont conservés. La sortie se parse vers exactement le même AST que l'entrée. Vous pouvez le vérifier en passant les deux par graphql-js et en comparant les documents obtenus.
Vais-je perdre la documentation de mon schéma ?
Oui — c'est tout l'intérêt. Les descriptions et les commentaires `#` sont supprimés. Gardez votre source non minifiée en gestion de version et ne minifiez que quand vous êtes sur le point d'expédier l'artefact. La documentation que vous voulez vraiment exposer aux clients vit dans votre réponse d'introspection, qui est générée à partir des métadonnées des resolvers en runtime, pas depuis la chaîne SDL déployée.
Mon schéma est-il envoyé à un serveur ?
Non. La minification se passe entièrement dans votre navigateur. Rien n'est envoyé, rien n'est loggé. Vous pouvez coller des schémas internes ou non publiés sans souci.
Combien puis-je espérer économiser ?
Ça dépend du niveau de documentation de votre schéma. Un SDL basique sans descriptions économise 10 à 15 % (uniquement les espaces). Un schéma bien documenté avec descriptions en bloc sur chaque type et chaque champ économise généralement 40 à 60 %. La pastille des octets économisés dans l'en-tête du panneau de sortie vous donne le chiffre exact pour votre entrée.
Gère-t-il les directives, les scalars personnalisés et la federation ?
Oui. @deprecated, @key, @external, scalar DateTime et toute directive ou scalar personnalisé sont conservés. Le minifieur ne supprime que les tokens ignorables — tout ce qui est sémantique reste. Les directives Federation passent proprement.
Quelle taille de schéma puis-je minifier ?
Tout ce que votre navigateur affiche confortablement. Des schémas de quelques centaines de types ne posent pas de problème. Au-delà d'environ 5 Mo, c'est l'éditeur Ace lui-même qui commence à ramer — c'est ça le goulot d'étranglement, pas le minifieur.
Autres outils GraphQL
La minification est une partie du travail avec GraphQL. Ces outils couvrent le reste :