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.
-
check_circle_outlineMódulo 1 | 8 clases
Introducción
expand_more-
done_all
Clase 1
Presentación del curso
-
done_all
Clase 2
Qué aprenderé en este curso
-
done_all
Clase 3
Qué es un servicio web
-
done_all
Clase 4
Qué es GraphQL
-
done_all
Clase 5
Servidor HTTP con Express
-
done_all
Clase 6
Definir el schema
-
done_all
Clase 7
Hola mundo con GraphQL
-
done_all
Clase 8
Tipos objeto en el schema
-
-
check_circle_outlineMódulo 2 | 3 clases
Fundamentos de GraphQL
expand_more -
check_circle_outlineMódulo 3 | 12 clases
Mi primer servicio web con GraphQL
expand_more -
check_circle_outlineMódulo 4 | 6 clases
Apollo GraphQL
expand_more -
check_circle_outlineMódulo 5 | 10 clases
Base de datos
expand_more -
check_circle_outlineMódulo 6 | 4 clases
Relaciones
expand_more -
check_circle_outlineMódulo 7 | 6 clases
Autenticación
expand_more