Comenzando con graphql

Lenguaje de consulta GraphQL (GQL)

En lugar de definir puntos finales de URL para cada recurso de datos, en GraphQL define un único punto final que acepta consultas GraphQL. A diferencia de los lenguajes de consulta de bases de datos tradicionales, GraphQL Query Language (GQL) es una proyección de datos devueltos por una consulta de nivel raíz. El esquema de GraphQL definirá el modelo de datos y las consultas y mutaciones de nivel raíz. GQL ejecuta esas consultas y define qué datos devolver.

Consulta de todos los títulos de películas del esquema de Star Wars

Consulta de datos de Star Wars para todas las películas con una proyección de solo el título Consulta GraphiQL

Consulta de residentes del planeta para la película de Star Wars “Una nueva esperanza”

ingrese la descripción de la imagen aquí [Consulta GraphiQL][5]

Observe cómo la consulta raíz film() toma el parámetro id de la película “A New Hope” y la proyección de GQL devuelve el título, los planetas conectados a la película y luego los nombres residentes de los planetas. Visite el sitio [Star Wars GraphiQL][6] para experimentar con consultas en GraphQL.

3: http://graphql.org/swapi-graphql/?query=query%7B%0A%20%20allFilms%7B%0A%20%20%20%20films%7B%0A%20%20%20 %20%20%20título%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D 4: https://i.stack.imgur.com/bbCAW.png [5]: http://graphql.org/swapi-graphql/?query=query%7B%0A%20%20film(id%3A%20%22ZmlsbXM6MQ%3D%3D%22)%7B%0A%20% 20%20%20id%0A%20%20%20%20title%2C%0A%20%20%20%20planetaConexión%7B%0A%20%20%20%20%20%20planetas%7B%0A%20% 20%20%20%20%20%20%20nombre%0A%20%20%20%20%20%20%20%20residenteConexión%7B%0A%20%20%20%20%20%20%20% 20%20%20residentes%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20nombre%0A%20%20%20%20%20%20%20% 20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20% 20%20%7D%0A%20%20%7D%0A%7D [6]: http://graphql.org/swapi-graphql/

Definición de esquema

En GraphQL, el esquema define la ejecución raíz consultas y mutaciones, así como los tipos para sus datos.

Tipo de objeto de esquema

El tipo ‘Persona’ tiene dos campos, uno es un tipo Escalar estándar y el otro representa una relación con una lista de otros tipos de Persona que son ‘amigos’. Vincular otros tipos es lo que hace que GraphQL sea tan poderoso. Ahora, en GraphQL Query Language (GQL), el cliente puede recorrer el gráfico de amigos sin ningún código adicional ni consultas avanzadas.

type Person {
  id: ID
  name: String
  friends: [Person]
}

Consulta de esquema

La consulta persona busca a una sola persona por su id. Este es el punto de entrada a sus datos para los clientes que usan GQL.

type Query {   
  person(id: ID!): Person
}

Consulta a los amigos de los amigos de los amigos de Nick

Ahora que tenemos un tipo de persona y una consulta raíz de persona, podemos buscar una persona y tantos grados de separación como queramos de la red de amigos de la persona.

query {
  person(id: 'nick'){
    id
    name
    friends{
      id
      name
      friends{
        id
        name
        friends{
          id
          name
        }
      }
    }
  }
}

Instalación e implementación del servidor

GraphQL.js

GraphQL.js es una implementación de referencia de JavaScript para GraphQL. Puede instalarlo a través de npm:

  • Inicialice npm en su proyecto si aún no lo ha hecho: npm init
  • Instale GraphQL.js desde npm: npm install --save graphql

Servidor de ejemplo

var { graphql, buildSchema } = require('graphql');

// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
  type Query {
    hello: String
  }
`);

// The root provides a resolver function for each API endpoint
var root = {
  hello: () => {
    return 'Hello world!';
  },
};

// Run the GraphQL query '{ hello }' and print out the response
graphql(schema, '{ hello }', root).then((response) => {
  console.log(response);
});

Alternativas de middleware de servidor