GraphQL es un lenguaje de consulta y manipulación de datos que permite especificar qué datos se van a recuperar (" obtención declarativa de datos") o modificar. Un servidor GraphQL puede procesar una consulta de cliente utilizando datos de distintas fuentes y presentar los resultados en un gráfico unificado . [ 2 ] El lenguaje no está vinculado a ninguna base de datos o motor de almacenamiento específico. Existen varios motores de ejecución de código abierto para GraphQL.
Historia
Facebook comenzó el desarrollo de GraphQL en 2012 y publicó un borrador de especificación y una implementación de referencia como código abierto en 2015. [ 3 ] En 2018, GraphQL se trasladó a la recién creada GraphQL Foundation, alojada por la Linux Foundation , una organización sin fines de lucro . [ 4 ] [ 5 ]
El 9 de febrero de 2018, el lenguaje de definición de esquemas GraphQL pasó a formar parte de la especificación. [ 6 ]
Muchas API públicas populares adoptaron GraphQL como método predeterminado para acceder a ellas. Entre ellas se incluyen las API públicas de Facebook, GitHub , Yelp , Shopify , la API de Google Directions y muchas otras. [ 7 ] [ 8 ]
Existe una conferencia anual de GraphQL [ 9 ] que presenta los nuevos desarrollos del protocolo y organizaciones que utilizan GraphQL con éxito. El evento es organizado por la Fundación GraphQL y entre los organizadores anteriores se incluyen Prisma, Hygraph y Commercetools .
Diseño
GraphQL admite la lectura, escritura (mutación) y suscripción a cambios en los datos (actualizaciones en tiempo real, comúnmente implementadas mediante WebSockets ). [ 10 ] Un servicio GraphQL se crea definiendo tipos con campos y luego proporcionando funciones para resolver los datos de cada campo. Los tipos y campos conforman lo que se conoce como la definición del esquema . Las funciones que recuperan y mapean los datos se denominan resolutores . [ 11 ]
Tras validarse según el esquema, el servidor ejecuta una consulta GraphQL. El servidor devuelve un resultado que refleja la estructura de la consulta original, normalmente en formato JSON . [ 12 ]
Sistema de tipos

Con GraphQL, un dominio de negocio se modela como un grafo definiendo un esquema; dentro de este esquema, se definen diferentes tipos de nodos y sus relaciones. [ 13 ]
El sistema de tipos de GraphQL describe qué datos se pueden consultar desde la API. El conjunto de esas capacidades se denomina esquema del servicio , y los clientes pueden usar ese esquema para enviar consultas a la API que devuelven resultados predecibles. [ 14 ]
El tipo raíz de un esquema GraphQL, Querypor defecto, contiene todos los campos que se pueden consultar. Otros tipos definen los objetos y campos que el servidor GraphQL puede devolver. Existen varios tipos base, denominados escalares, para representar elementos como cadenas de texto, números e identificadores.
Los campos se definen como anulables por defecto, y se puede usar un signo de exclamación al final para que un campo no sea anulable (obligatorio). Un campo se puede definir como una lista encerrando el tipo de campo entre corchetes (por ejemplo, authors: [String]). [ 15 ]
tipo Consulta { usuarioActual : Usuario }tipo Usuario { id : ID ! nombre : Cadena ! }Consultas
Una consulta GraphQL define la estructura exacta de los datos que necesita el cliente.
consulta CurrentUser { currentUser { nombre edad } }Una vez validados y ejecutados por el servidor GraphQL, los datos se devuelven con el mismo formato.
{ "usuarioactual" : { "nombre" : "John Doe" , "edad" : 23 } }Mutaciones
Una mutación GraphQL permite crear, actualizar o eliminar datos. Generalmente, las mutaciones contienen variables que permiten que los datos se transmitan del cliente al servidor. La mutación también define la estructura de los datos que se devolverán al cliente una vez finalizada la operación.
mutación CreateUser ( $name : String !, $age : Int !) { createUser ( userName : $name , age : $age ) { nombre edad } }Las variables se pasan como un objeto con campos que coinciden con los nombres de las variables en la mutación.
{ "nombre" : "Han Solo" , "edad" : 42 }Una vez completada la operación, el servidor GraphQL devolverá datos que coincidan con la estructura definida por la mutación.
{ "data" : { "createUser" : { "name" : "Han Solo" , "age" : 42 } } }Suscripciones
GraphQL también admite actualizaciones en tiempo real enviadas desde el servidor al cliente mediante una operación denominada suscripción. En este caso, el cliente define el formato de los datos que necesita cada vez que se realiza una actualización.
suscripción { nuevaPersona { nombre edad } }Cuando se produce una mutación a través del servidor GraphQL que actualiza el campo asociado, los datos se envían a todos los clientes suscritos en el formato configurado a través de la suscripción.
{ "newPerson" : { "name" : "Jane" , "age" : 23 } }Control de versiones
Si bien no hay nada que impida que un servicio GraphQL se versione como cualquier otra API, GraphQL defiende firmemente la idea de evitar el versionado al proporcionar las herramientas para la evolución continua de un esquema GraphQL. [ 16 ]
La @deprecateddirectiva integrada se utiliza dentro del lenguaje de definición del sistema de tipos para indicar partes obsoletas del esquema de un servicio GraphQL, como campos obsoletos en un tipo o valores de enumeración obsoletos. [ 15 ]
GraphQL solo devuelve los datos que se solicitan explícitamente, por lo que se pueden agregar nuevas funcionalidades mediante nuevos tipos o nuevos campos en los tipos existentes sin generar cambios incompatibles. Esto ha dado lugar a la práctica común de evitar siempre los cambios incompatibles y ofrecer una API sin versiones. [ 16 ]
Comparación con otros lenguajes de consulta
GraphQL no proporciona un lenguaje de consulta de grafos completo como SPARQL , ni siquiera en dialectos de SQL que admitan el cierre transitivo . Por ejemplo, una interfaz GraphQL que informa sobre los padres de un individuo no puede devolver, en una sola consulta, el conjunto de todos sus ancestros.
Pruebas
Las API GraphQL se pueden probar manualmente o con herramientas automatizadas que emiten solicitudes GraphQL y verifican la corrección de los resultados. También es posible la generación automática de pruebas. [ 17 ] Se pueden generar nuevas solicitudes mediante técnicas basadas en búsquedas debido a un esquema tipado y capacidades de introspección. [ 18 ]
Algunas de las herramientas de software utilizadas para probar implementaciones de GraphQL incluyen Postman , Beeceptor, GraphiQL, Apollo Studio, GraphQL Hive, GraphQL Editor y Step CI. [ 19 ]
Véase también
Referencias
- ↑ "Notas de la versión de GraphQL de septiembre de 2025" . GitHub .
- ↑ "Aprende los fundamentos de GraphQL con este tutorial completo" . www.howtographql.com . Consultado el 25 de abril de 2023 .
- ↑ "GraphQL: Un lenguaje de consulta de datos" . 14 de septiembre de 2015.
- ↑ "GraphQL de Facebook obtiene su propia fundación de código abierto" . TechCrunch . Consultado el 7 de noviembre de 2018 .
- ↑ "La Fundación Linux anuncia su intención de formar una nueva fundación para apoyar GraphQL" . La Fundación Linux . 6 de noviembre de 2018. Consultado el 17 de marzo de 2023 .
- ↑ "GraphQL SDL incluido en el repositorio de Github" . GitHub .
- ↑ "GraphQL Landscape" . landscape.graphql.org . 5 de julio de 2025.
- ↑ graphql-kit/graphql-apis , graphql-kit, 31 de mayo de 2025 , consultado el 5 de junio de 2025
- ↑ "GraphQL Conference 2025" . GraphQL Foundation . Consultado el 29 de septiembre de 2025 .
- ↑ "GraphQL" . facebook.github.io . Facebook . Archivado del original el 18 de julio de 2018. Consultado el 4 de julio de 2018 .
- ↑ "Introducción a GraphQL" . graphql.org . Consultado el 25 de abril de 2023 .
- ↑ "Ejecución" . graphql.org . Consultado el 25 de abril de 2023 .
- ↑ "Pensando en grafos | GraphQL" . graphql.org . Consultado el 3 de junio de 2025 .
- ↑ "Esquemas y tipos | GraphQL" . graphql.org . Consultado el 3 de junio de 2025 .
- 1 2 "GraphQL" . spec.graphql.org . Consultado el 25 de abril de 2023 .
- 1 2 "Diseño de esquema | GraphQL" . graphql.org . Consultado el 3 de junio de 2025 .
- ↑ Vargas, DM; Blanco, AF; Vidaurre, AC; Alcocer, JPS; Torres, MM; Bergel, A.; Ducasse, S. (2018). "Pruebas de desviación: una técnica de generación de casos de prueba para API GraphQL" (PDF) . 11.º Taller Internacional sobre Tecnologías Smalltalk (IWST) : 1–9 .
- ↑ Karlsson, Stefan; Causevic, Adnan; Sundmark, Daniel (mayo de 2021). «Pruebas automáticas basadas en propiedades de las API GraphQL». Conferencia Internacional IEEE/ACM de 2021 sobre Automatización de Pruebas de Software (AST) . Madrid, España: IEEE. pp. 1–10 . arXiv : 2012.07380 . doi : 10.1109/AST52587.2021.00009 . ISBN 978-1-6654-3567-3. S2CID 229156477 .
- ↑
Enlaces externos
- Sitio web oficial
- GraphQL: El documental en YouTube
- Lenguajes de consulta
- Lenguajes de modelado de datos
- Estructuras de datos de grafos
- Arquitectura de software