GraphQL

Servidores, clientes y lo fácil

What

  • Server runtime 🧠
  • Lenguaje de consulta 🔎

GraphQL Server (runtime!)

  1. ​Schema (query / mutation / ...)
  2. Types
  3. Setting up... 🔧
// Fuente: https://github.com/sitepoint-editors/graphql-nodejs import express from 'express';
import graphqlHTTP from 'express-graphql';
import mongoose from 'mongoose';

import schema from './graphql';

var app = express();

// GraphqQL server route
app.use('/graphql', graphqlHTTP(req => ({
schema,
pretty: true,
graphiql: true
})));

// Puede ser cualquier db
mongoose.connect('mongodb://mongo/graphql');

// start server
var server = app.listen(8080, () => {
console.log('Listening at port', server.address().port);
});

BaaS o no = Easy peasy? 👓

👌 - Apollo Server
😶 - express-graphql (👀)
😶 - Loopback 4
👌 - Prisma.io (BaaS)
👌 - Hasura (BaaS)
👌 - Parse (BaaS)
...?

Fuente: https://graphql.org/code/#javascript

¿Por qué una librería?

  1. Genera queries y mutaciones según datos
  2. Autenticación, autorización, roles...
  3. Posee filtros prediseñados (where, greater than...)

Primer BaaS: Hasura.io

# Ejemplos de Hasura query MyQuery { users(where: { name: { _eq: "Jorge" }}) { id } } mutation MyMutation { # No todos piden un nombre por operación... insert_users(objects: {id: "", lastname: ""}) { returning { # ... ni todos piden un returning { } email } } }

Hasura.io es 👍 en...

  • Eventos (webhooks)
  • Dashboard de datos embebido
  • Esquemas remotos 
  • Migraciones

Hasura.io es 👎 en...

  • Autenticación
  • Soporte de DBs (>Postgres 9.5)

Segunda BaaS - Parse

Parse es 👍 en

  • ​Basado en Objetos
  • Integrable con... otro backend (Inception)
  • Puede ser un hub de backends en Parse
  • Funcionalidades mobile (Push notifications...)

Parse es 👎 en

  • Soporte de DB (Mongo, Postgres)
  • Plantea ser la solución para todo

GraphQL Client

👍 - Apollo Client