GraphQL engloba dos elementos principalmente, por un lado un lenguaje de consulta que le permite a los clientes que consumen un servicio web, especificar qué datos necesitan. Por otro lado, es un entorno de ejecución para responder a estas consultas a través de la especificación de un esquema tipado en el que se enlistan los datos que el servicio web puede entregar y las operaciones para dar respuesta a las solicitudes de los clientes.

Entonces, hay una definición completa de cómo consultar datos, piensa como el lenguaje SQL te permite hacer N cantidad de cosas con los datos de una base de datos, el lenguaje de GraphQL es similiar aunque mucho más limitado para un servicio web.
Una consulta con el lenguaje de GraphQL se ve como aparece en pantalla:
{
courses {
title
}
}
El lenguaje de consultas de GraphQL es muy expresivo y es parte fundamental de la tecnología, ya que nos permite declarar qué información queremos del servicio web de manera detallada, en el ejemplo anterior podemos asumir que queremos los cursos, PERO, únicamente el título de ellos.
A diferencia de las alternativas a GraphQL donde las respuestas para una consulta están predefinidas y no pueden modificarse por parte del cliente, las consultas de GraphQL son dinámicas, el cliente dice qué quiere y en qué formato lo quiere.
La pregunta es, cómo puede GraphQL entender estas queries y dar una respuesta apropiada.
Aquí es donde el entorno de ejecución entra en juego, usando un lenguaje de backend y las librerías correspondientes de GraphQL, uno puede definir un esquema en donde se especifique qué datos expondremos, cuál es su formato, de qué tipo son los datos que se exponen, y el código que dará respuesta a las consultas.
Un esquema puede verse como ves en pantalla:
type Course{
id: ID!
title: String!
views: Int
}
type Query {
courses(page: Int,limit: Int = 1): [Course]
course(id : ID!): Course
}
Ahí se especifica por un lado el tipo curso y sus propiedades, además de las operaciones de consulta que se pueden realizar y qué retornan dichas operaciones.
Cuando intentamos hacer una consulta a un servicio web de GraphQL, el cliente descarga el esquema, y en base a la información ahí provista puede saber qué operaciones realizar y qué datos puede consultar, por ejemplo, puede saber que de un curso podrá obtener un id, un título o las vistas.
Además de esta definición de tipos, el esquema se compone de una serie de resolvers, como los llamamos en la terminología de GraphQL, estos resolvers son funciones que dan respuesta a las consultas realizadas. En el caso del esquema actual, se requerirían dos resolver, uno para la consulta courses y otro para course.
Estos resolvers de nuevo, son simplemente funciones que responden a las consultas, quizás trayendo los datos de una base de datos, de un arreglo, de otro servicio web, eso ya no importa, solo tienen que retornar los recursos apropiados.
En base a los datos que retornan los resolvers, GraphQL filtrará la información para únicamente entregar lo que se solicitó en la consulta, de manera que si siguiendo con nuestro ejemplo el resolver de courses retorna el siguiente arreglo:
[
{ id: "1", title: 'Curso de GraphQL', views: 1000 },
{ id: "2", title: 'Curso de JavaScript', views: 50000 }
]
GraphQL filtrará las propiedades y sólo dejará el title para una consulta como la antes vista:
{
courses {
title
}
}
Esto quiere decir que tú no necesitas filtrar ni interpretar la consulta, las herramientas de implementación de GraphQL lo hacen por ti.
Luego de implementar el servidor, recibiríamos una respuesta como esta a la consulta antes realizada:
{
"data": {
"courses": [
{
"title": "Curso de GraphQL"
},
{
"title": "Curso de JavaScript"
}
]
}
}
Tenemos los cursos, pero únicamente la propiedad title que solicitamos.
A lo largo del curso irás aprendiendo mucho más acerca de ambos elementos, el lenguaje de consulta y el entorno de ejecución para dar respuesta a estas consultas. En este tema, por ejemplo, no hemos hablado aún de mutaciones, otra operación importante en GraphQL, ni hemos visto detalles de la consulta, sin embargo, creo que la explicación nos deja un panorama claro de qué es GraphQL.
Ahora sigamos para pronto comenzar a implementar nuestro propio servidor.
-
Módulo 1 | 8 clases
Introducción
expand_more-
play_circle_outline
Clase 1
Presentación del curso
-
play_circle_outline
Clase 2
Qué aprenderé en este curso
-
play_circle_outline
Clase 3
Qué es un servicio web
-
play_arrow
Clase 4
Qué es GraphQL
-
play_circle_outline
Clase 5
Servidor HTTP con Express
-
play_circle_outline
Clase 6
Definir el schema
-
play_circle_outline
Clase 7
Hola mundo con GraphQL
-
play_circle_outline
Clase 8
Tipos objeto en el schema
-
-
Módulo 2 | 3 clases
Fundamentos de GraphQL
expand_more -
Módulo 3 | 12 clases
Mi primer servicio web con GraphQL
expand_more-
play_circle_outline
Clase 1
Preparando el proyecto
-
play_circle_outline
Clase 2
GraphQL Schema Language
-
play_circle_outline
Clase 3
Mocking de datos
-
play_circle_outline
Clase 4
Preparando las consultas
-
play_circle_outline
Clase 5
GraphiQL
-
play_circle_outline
Clase 6
Consultar recurso individual
-
play_circle_outline
Clase 7
Variables de consulta
-
play_circle_outline
Clase 8
Mutaciones
-
play_circle_outline
Clase 9
Actualizar registros
-
play_circle_outline
Clase 10
Input types
-
play_circle_outline
Clase 11
Eliminar registros
-
play_circle_outline
Clase 12
Paginación
-
-
Módulo 4 | 6 clases
Apollo GraphQL
expand_more -
Módulo 5 | 10 clases
Base de datos
expand_more-
play_circle_outline
Clase 1
Configurando la base de datos
-
play_circle_outline
Clase 2
Modelo
-
play_circle_outline
Clase 3
Configurar GraphQL con express
-
play_circle_outline
Clase 4
Definición de tipos organizada por archivos
-
play_circle_outline
Clase 5
Resolvers modularizados
-
play_circle_outline
Clase 6
Crear registros
-
play_circle_outline
Clase 7
Consultar registros
-
play_circle_outline
Clase 8
Actualizar registros
-
play_circle_outline
Clase 9
Eliminar registros
-
play_circle_outline
Clase 10
Paginación
-
-
Módulo 6 | 4 clases
Relaciones
expand_more -
Módulo 7 | 6 clases
Autenticación
expand_more