Entrada

Salida

¿Qué es el Minificador de GraphQL?

Cuando envías un esquema GraphQL como parte de un artefacto de despliegue, un bundle de Lambda o un SDL servido desde una CDN, las descripciones y los comentarios `#` se acumulan rápido. Un esquema de producción real puede ser fácilmente un 40-60 % de documentación medido en bytes — útil cuando lo leen personas, peso muerto cuando viaja por la red para arrancar un cliente. La especificación de GraphQL define los comentarios, las descripciones de cadena en bloque y la mayoría del espacio en blanco como tokens ignorados, lo que significa que cualquier parser razonable los ignora de todos modos. Este minificador elimina todo eso y devuelve un SDL en una sola línea que es byte por byte equivalente al original desde la perspectiva del parser.

El minificador está hecho a mano — no se carga el paquete npm graphql en la página, así que el primer renderizado se mantiene ligero. Tokeniza el SDL, descarta cada token de comentario y de cadena en bloque, y vuelve a emitir los tokens estructurales con el mínimo absoluto de espacios necesarios para mantener separados los tokens name adyacentes (el único lugar donde el SDL conforme al spec realmente necesita un espacio). La salida se verifica con el mismo parser ligero usado en el formateador, de modo que el viaje de ida y vuelta por graphql-js o Apollo Server al arranque se comporta igual que con el original.

Todo se ejecuta en tu navegador. Sin subidas, sin almacenar el esquema en ningún lado. Pega, minifica, copia.

Cómo usar el Minificador de GraphQL

Tres pasos rápidos. Los botones descritos abajo son los botones reales de esta página — no hay botón Minificar porque la minificación se ejecuta sola.

1

Pegar, subir o cargar un ejemplo

Pega un esquema GraphQL en el panel de Entrada a la izquierda — la minificación ocurre automáticamente una fracción de segundo después de que dejas de escribir, así que no hay un botón Convertir que buscar. Haz clic en Subir para un archivo .graphql, .graphqls o .gql, o pulsa Ejemplo para cargar un esquema realista de pedidos de e-commerce con comentarios y descripciones de cadena en bloque que verás desaparecer. Una entrada típica se ve así:

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

Tanto los esquemas estilo servidor (con extend type Query) como las definiciones de tipos independientes funcionan. Las formas aceptadas coinciden con lo que admite el lenguaje de definición de esquema de GraphQL.

2

Lee la salida minificada

El panel de Salida a la derecha muestra el SDL minificado en una sola línea, con la píldora de bytes ahorrados en el encabezado del panel para que veas de un vistazo cuánto ahorraste. Los comentarios (# ...) y las descripciones de cadena en bloque ("""...""") se eliminan por completo — no tienen significado semántico según la especificación GraphQL de Relay, y cualquier herramienta basada en introspección recogerá las descripciones de tu capa de resolvers de todos modos. Si el SDL tiene llaves desbalanceadas o cualquier otro error de parseo, el minificador muestra un mensaje claro inline — nunca lanza una excepción ni se cae.

3

Copiar o descargar

Pulsa Copiar para tomar el esquema minificado y pegarlo en un script de despliegue, una variable de entorno de Lambda o un archivo de configuración. Pulsa Descargar para guardarlo como .graphql. El botón de limpiar en el panel de entrada te devuelve a un estado en blanco. La minificación ocurre completamente en el cliente — tu esquema nunca sale de la página.

Cuándo te conviene usar esto

Artefactos de despliegue más pequeños

¿Empaquetando tu esquema en una función serverless o una capa de Docker? Eliminar descripciones y comentarios suele reducir el tamaño a la mitad. Multiplica eso por cada arranque en frío y cada descarga de capa y los ahorros se notan en la factura. Al parser en runtime no le importa — las descripciones son metadatos solo de introspección, y la mayoría de los despliegues de producción desactivan la introspección de todos modos según la guía de producción de Apollo Router.

Esquemas servidos por CDN

Si tu gateway descarga el SDL desde una CDN al arrancar (composición de supergraph en Federation, descargas de un schema registry), cada byte cuesta latencia en el camino frío. El SDL minificado parsea idénticamente y recorta una buena parte del tamaño en la red — a menudo más de lo que conseguiría gzip, porque gzip no puede comprimir lo que ya no está.

Incrustar esquemas en el código fuente

A veces necesitas incrustar un esquema como cadena en un archivo de configuración, una variable de entorno o una herramienta hecha a mano. Una versión minificada en una sola línea encaja limpiamente en un template literal de TypeScript o un escalar YAML sin tener que escapar cada salto de línea.

Reducir el ruido de los diffs

Cuando dos revisiones de un esquema solo difieren en descripciones o comentarios, el diff estructural real queda enterrado bajo cambios en docstrings. Minificar ambos lados antes de hacer el diff aísla el delta real del esquema, lo cual es útil para gestión de cambios y detección de cambios incompatibles.

Preguntas frecuentes

¿El esquema minificado sigue siendo GraphQL válido?

Sí — todos los tokens que el spec define como ignorables (comentarios, descripciones, espacios redundantes, comas) se eliminan, pero todos los nombres, signos de puntuación, literales de cadena y números se mantienen. La salida parsea al mismo AST exacto que la entrada. Puedes verificarlo pasando ambos por graphql-js y comparando los documentos resultantes.

¿Perderé la documentación de mi esquema?

Sí — esa es la idea. Las descripciones y los comentarios `#` se eliminan. Mantén tu fuente sin minificar en control de versiones y solo minifica cuando estés a punto de enviar el artefacto. La documentación que de verdad quieres exponer a los clientes vive en tu respuesta de introspección, que se genera a partir de los metadatos de los resolvers en runtime, no de la cadena SDL desplegada.

¿Mi esquema se envía a un servidor?

No. La minificación se ejecuta enteramente en tu navegador. No se sube nada, no se registra nada. Es seguro pegar esquemas internos o no publicados.

¿Cuánto puedo esperar ahorrar?

Depende de cuán documentado esté tu esquema. Un SDL básico sin descripciones ahorra 10-15 % (solo espacios). Un esquema bien documentado con descripciones de cadena en bloque en cada tipo y campo suele ahorrar 40-60 %. La píldora de bytes ahorrados en el encabezado del panel de salida te dice el número exacto para tu entrada.

¿Maneja directivas, scalars personalizados y federation?

Sí. @deprecated, @key, @external, scalar DateTime y cualquier directiva o scalar personalizado se mantienen. El minificador solo elimina tokens ignorables — todo lo semántico se conserva. Las directivas de Federation pasan limpiamente.

¿Qué tan grande puede ser un esquema minificado?

Lo que tu navegador renderice cómodamente. Esquemas de unos cientos de tipos no son problema. Pasados unos 5 MB el propio editor Ace empieza a ralentizarse — ese es el cuello de botella, no el minificador.

Otras herramientas de GraphQL

Minificar es una parte del trabajo con GraphQL. Estas herramientas cubren el resto: