GraphQL
Esta sección corresponde con la parte 8 del curso.
GraphQL plantea una forma de interactuar con los datos distinta a la que conocemos como REST.
Para poner en marcha un servicio de GraphQL hacemos uso del servidor Apolo
npm i apollo-server
Y montamos un archivo que lanzaremos con node que incluya tanto la definición de las estructuras de los datos como la de las llamadas:
Definimos las estructuras y las consultas:
const typeDefs = gql`
type Book {
title: String!
published: Int!
author: String!
id: ID!
genres: [String!]!
}
type Query {
bookCount: Int!
allBooks(author: String, genre: String): [Book!]!
}
`
Además, debemos definir lo que se conoce como resolvers, que hacen uso de las estructuras de consulta que hemos definido para responder:
const resolvers = {
Query: {
bookCount: () => books.length,
allBooks: (root, args) => {
if(!args.author && !args.genre){
return books
} if (!args.genre) {
return(books.filter(book => book.author === args.author))
}
if (!args.author){
return(books.filter(book => book.genres.includes(args.genre) ))
}
return(books.filter(book => book.author === args.author && book.genres.includes(args.genre) ))
},
}
En estos resolvers podemos incluir toda la lógica que queramos para responder en función de nuestras necesidades.
Con ello, GraphQL opera como traductor entre la consulta y los datos adaptando las respuestas a las necesidades, previamente definidas, del cliente.
Además, durante el desarrollo, si trabajamos con el servidor Apollo, tendremos un entorno de pruebas donde realizar las consultas y ver qué responde el servidor de forma rápida y cómoda.

Conclusiones
Pese a que en un principio era algo reticente y consideraba que mis proyectos irían todos enfocados a servicios REST, esta solución me está pareciendo cada vez más interesante y más útil y es posible que me plantee incluirla en Heres I.