GraphQL es un lenguaje de consulta para APIs que permite al cliente solicitar exactamente los datos que necesita de una forma flexible y eficiente. A diferencia de REST, que tiene limitaciones para incluir o excluir datos de las respuestas, GraphQL permite al cliente definir la estructura de los datos que recibirá del servidor. Los esquemas de GraphQL describen los datos, relaciones y campos que se expondrán, y las consultas (queries) y mutaciones permiten leer y modificar datos respectivamente.
2. ¿Qué es GraphQL?
● Query language creado por Facebook en 2012
● Es una interfaz entre el cliente y el servidor para pedir y manipular datos
● El cliente define la respuesta que quiere obtener del servidor
4. REST es bueno :)
Ejemplo: GET /users/1/friends
Ventajas:
● Muy descriptivo, estamos solicitando los amigos del usuario con id = 1
● URL path único para un recurso en particular
● Cacheable
5. Pero tiene limitaciones :(
Estoy seguro que han visto algo asi:
GET /users/1/friends/1/dogs/1?include=user.name,dog.age
Desventajas:
● Complicado de incluir datos en la respuesta
● Complicado de excluir datos de la respuesta
● Multiples request para obtener
7. Con graphQL incluso puedes hacer esto :)
movies {
id
actors {
name
movies {
id
actors {
name
movies {
....
}
}
}
}
8. Schemas (Describir los datos que regresaremos)
● Describir nuestros modelos
● Relaciones entre los modelos
● Exponer sus campos / datos
Types
● Int
● Float
● String
● Boolean
● Object
● [Int]
● [Float]
● [String]
● [Boolean]
● [Object]
● Int!
● Float!
● String!
● Boolean!
● Object!
● [Int]!
● [Float]!
● [String]!
● [Boolean]!
● [Object]!
9. Queries y Mutations
Queries = Leer datos del servidor (por lo general extraidos de una db)
Mutations = Crear / modificar / borrar datos en el servidor
GraphQL is a query language for your API
Uses HTTP
Client defines the response body
REST = multiples endpoints, multiples HTTP commands
GraphQL = 1 solo endpoint, la mayoría del tiempo solo son POST request
Cada comando HTTP tiene una funcion bien especifica en el servidor lo cual es bueno, pero tambien te forza a realizar multiples peticiones al servidor
The disadvantage is that it's hard to specify and implement advanced requests with includes, excludes and especially with linked resources.
Los schemas nos permiten describir nuestros modelos, relacionarlos entre si y exponer sus datos.
Hablar sobre tips de seguridad en schemas, no exponer datos sensibles, manejar datos por default, etc