Extraer nombres y tipos de variables GraphQL
Este extractor de variables GraphQL lee un documento ejecutable, comprueba su sintaxis y enumera las variables declaradas en cada consulta, mutación o suscripción.
Ejecutar — gratis
Conserva la clase y el nombre opcional de la operación, además del nombre y la notación exacta del tipo de cada variable, incluidas listas y marcas de no nulo. Resulta útil para crear formularios, revisar operaciones cliente, documentar integraciones o comprobar consultas antes de ejecutarlas.
Distinga declaraciones de usos
Las variables GraphQL aparecen como declaraciones, por ejemplo <code>$id: ID!</code>, junto al nombre de una operación, y como referencias, por ejemplo <code>user(id: $id)</code>, dentro de la selección. Esta capacidad solo devuelve las declaraciones. Las agrupa bajo la consulta, mutación o suscripción correspondiente, por lo que dos operaciones pueden declarar el mismo nombre sin mezclarse. La notación del tipo se conserva: <code>String</code>, <code>ID!</code> o <code>[ID!]!</code>. Los valores predeterminados y las directivas se analizan para comprobar la sintaxis, pero no se incluyen. Los fragmentos también se validan, aunque no producen entradas porque no declaran variables de operación. Una consulta abreviada anónima aparece como una operación de consulta sin nombre y con una lista vacía de variables.
Valide la sintaxis de forma determinista
Una expresión regular deja de ser fiable cuando aparecen comentarios, cadenas, cadenas de bloque, listas anidadas, objetos predeterminados, directivas, fragmentos, alias u operaciones múltiples. Este analizador tokeniza el documento completo y sigue la gramática ejecutable de GraphQL. Rechaza cadenas sin cerrar, números inválidos, caracteres inesperados, selecciones vacías y definiciones incompletas. Por eso puede utilizarse como control temprano en una compilación. No consulta la red ni un esquema. En consecuencia, no determina si un campo existe en su servidor, si el tipo de una variable coincide con un argumento o si se cumplen reglas dependientes del esquema. Use esta capacidad para sintaxis y descubrimiento de declaraciones, y añada después una validación contra el esquema cuando disponga de él.
Integre el resultado estructurado
La respuesta contiene el array <code>operations</code> en el orden del documento y el total <code>variable_count</code>. Cada operación indica su clase, incluye el nombre cuando existe y aporta un array <code>variables</code> con registros <code>name</code> y <code>type</code>. Esta forma estable sirve para generar editores, comparar operaciones versionadas, crear tablas de documentación o detectar nuevas entradas obligatorias. Mantener separadas las operaciones evita falsos conflictos. La entrada está limitada a 200,000 caracteres para acotar el análisis. No se ejecuta ninguna consulta ni se solicitan esquemas, cabeceras, credenciales o valores. Puede pegar el documento en el navegador o llamar a la API por $0.002 por elemento. Los errores señalan una posición aproximada del problema.
Qué puede hacer con ella
Crear un formulario de variables
Lea las declaraciones y genere las entradas correctas antes de solicitar valores de ejecución.
Revisar consultas persistidas
Compare nombres y tipos GraphQL exactos cuando cambie una operación versionada.
Documentar operaciones cliente
Convierta un documento con varias operaciones en un inventario agrupado por clase.
Preguntas frecuentes
¿Ejecuta la consulta GraphQL?
No. Analiza el documento localmente y nunca contacta con un endpoint GraphQL.
¿Incluye los usos de variables?
No. Solo devuelve variables declaradas; las referencias en campos, argumentos o directivas no cuentan como declaraciones.
¿Conserva las marcas de lista y no nulo?
Sí. Tipos como ID!, [String!] y [ID!]! mantienen su notación GraphQL completa.
¿Valida campos contra mi esquema?
No. Valida la sintaxis sin esquema; la existencia de campos y la compatibilidad requieren otra etapa.
¿Admite varias operaciones y fragmentos?
Sí. Devuelve las operaciones en orden y comprueba los fragmentos, que no añaden declaraciones.
¿Cuánto cuesta una llamada API?
Cada elemento cuesta $0.002. La versión web ejecuta localmente el mismo analizador.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/dev/graphql-query-variables-extract \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query FindUser($id: ID!, $withPosts: Boolean = false) { user(id: $id) { name posts @include(if: $withPosts) { title } } }"}'const res = await fetch("https://api.kit.forhosting.com/dev/graphql-query-variables-extract", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"query": "query FindUser($id: ID!, $withPosts: Boolean = false) { user(id: $id) { name posts @include(if: $withPosts) { title } } }"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/graphql-query-variables-extract",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"query": "query FindUser($id: ID!, $withPosts: Boolean = false) { user(id: $id) { name posts @include(if: $withPosts) { title } } }"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/graphql-query-variables-extract", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"query":"query FindUser($id: ID!, $withPosts: Boolean = false) { user(id: $id) { name posts @include(if: $withPosts) { title } } }"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"query":"query FindUser($id: ID!, $withPosts: Boolean = false) { user(id: $id) { name posts @include(if: $withPosts) { title } } }"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/graphql-query-variables-extract", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"query": "query FindUser($id: ID!, $withPosts: Boolean = false) { user(id: $id) { name posts @include(if: $withPosts) { title } } }"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.graphql_query_variables_extract",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_chars | 200000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |