Schema y types

3/25
Recursos
Transcripción

El Schema es la base de una API en GraphQL, es el encargado de describir todos los tipos de información que va a contener.

Para la creación de este proyecto usaremos una herramienta llamada npx, para ello primero debes instalarlo con el comando:

npm i -g npx

Una vez instalado, dentro de la carpeta de nuestro proyecto vamos a correr el siguiente comando:

npx license mit > LICENSE && npx gitignore node && git init && npm init -y

Ya que termina de correr el comando es momento de añadir la dependencia de GraphQL a nuestro proyecto:

npm i graphql

Dentro de GraphQL contamos con distintos tipos de datos escalares:

  • String
  • Int
  • Float
  • Boolean
  • ID

Aportes 45

Preguntas 10

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

a 1.25 x se entiende mejor

Si tienes el siguiente error

Error: Expected undefined to be a GraphQL schema.


La solución es

Pasa los argumentos com un objeto

graphql({
    schema: schema,
    source: '{ hello }'})
.then((data) => {
    console.log(data);
})
.catch(e => {
    console.log(e);
});

Aquí dejo el comando para que sólo copien y peguen 😬
npx license mit > LICENSE && npx gitignore node && git init && npm init -y

Por si a alguien le interesa:

El tema que está usando el profesor es: Cobalt2 Theme Official
Para ver el tamaño de los paquetes: Import Cost

Está tan cool el script para inicializar el proyecto que me hice un alias con los comandos necesarios para mí para iniciar un proyecto en js en general, lo puse en mí ~/.zshrc y ~/.basrc:

alias jsinit='npx license mit > LICENSE && npx gitignore node && git init && npm init -y && npx eslint --init'

Genial, ahora entiendo porque aman tanto a GraphQL

siguiendo el ejemplo de la documentación!

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

var schema = buildSchema(`
  type Query {
    hello: String
  }
`);

var root = { hello: () => 'Hello world!' };

graphql(schema, '{ hello }', root).then((response) => {
  console.log(response);
});

Tengo este error:

$ node index.js
Error: Expected undefined to be a GraphQL schema.
    at assertSchema (D:\PLATZI\BSE DE DATOS\CURSO BASICO DE GRAPHQL\PROYECTO - PRACTICA\platzi-dir\node_modules\graphql\type\schema.js:35:11)
    at validateSchema (D:\PLATZI\BSE DE DATOS\CURSO BASICO DE GRAPHQL\PROYECTO - PRACTICA\platzi-dir\node_modules\graphql\type\validate.js:34:28)
    at graphqlImpl (D:\PLATZI\BSE DE DATOS\CURSO BASICO DE GRAPHQL\PROYECTO - PRACTICA\platzi-dir\node_modules\graphql\graphql.js:52:64)
    at D:\PLATZI\BSE DE DATOS\CURSO BASICO DE GRAPHQL\PROYECTO - PRACTICA\platzi-dir\node_modules\graphql\graphql.js:21:43
    at new Promise (<anonymous>)
    at graphql (D:\PLATZI\BSE DE DATOS\CURSO BASICO DE GRAPHQL\PROYECTO - PRACTICA\platzi-dir\node_modules\graphql\graphql.js:21:10)
    at Object.<anonymous> (D:\PLATZI\BSE DE DATOS\CURSO BASICO DE GRAPHQL\PROYECTO - PRACTICA\platzi-dir\index.js:24:1)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)

Versión powershell del comando para los que utilizamos windows:

npx license mit > LICENSE; npx gitignore node; git init; npm init -y

Empieza un poco confuso, espero que sea como el profe dice y tenerle confianza de que se irán despejando las dudas en los próximos cursos.

Les paso el código porque veo que nadie más lo ha hecho:

'use strict'

const {graphql, buildSchema} = require('graphql')

const schema = buildSchema(`
  type Query {
      hello: String
  }
`)

graphql(schema, '{ hello }').then((data) => {
    console.log(data)
})

Demoras al cargar este vídeo

Para los que estan instalando npm i -g npx ren linux y les da error usen: npm install-g npx

Les comento que si no les corre el comando y se queda estático, solo es cuestión de darle Enter y te corre normal

Hola! Con Node en la versión 16.x tuve que hacerlo de esta manera:

'use strict'

const { graphql, buildSchema, GraphQLObjectType, GraphQLSchema, GraphQLString } = require('graphql');



var schema = new GraphQLSchema({
    query: new GraphQLObjectType({
        name: 'RootQueryType',
        fields: {
            hello: {
                type: GraphQLString,
                resolve(){
                    return 'world';
                }
            }
        }
    })
})

var source = '{ hello }';

graphql({ schema, source }).then((result) => {
  // Prints
  // {
  //   data: { hello: "world" }
  // }
  console.log(result);
});

el curso ya esta desactualizado ya me a pasado con muchos cursos de platzi

El Schema es la base de una API de GraphQL, consiste en un documento que describe detalladamente los tipos de información que tendrá la API, cada uno especificando qué tipo de campo es.

Los tipos de datos en GraphQL son string, integer, boolean y float.

Para generar un Schema hay que importar la función buildSchema desde graphql y pasarle como parámetro la estructura del esquema. Esta función devuelve un objeto de GraphQL que ya se puede ejecutar.

const { graphql, buildSchema } = require('graphql');
const schema = buildSchema(`
    type Query{
        hello: String
    }
`)
graphql(schema, `{hello}`).then((data) => {
    console.log(Data);
})

Al ejecutar la función graphql recibe el Schema como primer parámetro y después la propiedad que estamos solicitando, en este caso hello. Devuelve una promesa con la información.

Al ejecutar el script devuelve un objeto data, con la propiedad hello que fue la que se solicitó. Al no haber datos hello es null.

He notado que la definición del esquema se hace con la versión 14, en la que le pasas un SDL.

A partir de la versión 16, o por lo menos en la que vamos actualmente (Por si alguien le da a npm install graphql instalará la última versión), el ejemplo ya no sirve porque el esquema se define de otra manera.

<code> 
const { graphql, GraphQLSchema, GraphQLObjectType, GraphQLString } = require('graphql');

const schema = new GraphQLSchema({
    query: new GraphQLObjectType({
        name: 'Query',
        fields: () => ({
            hello: {
                type: GraphQLString,
                resolve: () => 'Hello world!'
            }
        })
    })
});

graphql(schema, '{ hello }').then((response) => {
    console.log(response);
});

Ejecuto el comando y se queda ahí
![]()

😉😉😉😉😉

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

const schema = buildSchema(`
	type Query {
		hello: String
	} 
`);

(async () => {
  const response = await graphql(schema, '{ hello }');
  console.log(response);
})();
$ node index.js

ponganlo a 1.25 0 1.5 x y se escucha mejor

Si tienes problemas con npx y te sale un error de este estilo:

.
El problema puede ir asociado por tener espacios en el nombre de usuario. Esto me paso a mi y lo solucioné de esta forma:

1 - cmd /c mklink /J "C:\Users\myname" "C:\Users\My Name"
2 - npm config set cache C:\Users\myname\AppData\Roaming\npm-cache
3 - npm config set prefix C:\Users\myname\AppData\Roaming\npm

Esta información la saque de aquí: Error: EPERM: operation not permitted

Los tips de variable son: String, Integer, float, boolean.

E el arrow function que implime data se pueden quitar los parentesis de data pues solo recibe un parametro, lo aprendí en el curso de javascript xd

comando para inicializar proyecto de node rapidamente en git

Tomando el código de un compañero si tienen un error al ejecutar el código tienen que cambair el codigo de ejecutar a este:

graphql({
    schema: schema,
    source: '{ hello }'})
.then((data) => {
    console.log(data);
})
.catch(e => {
    console.log(e);
});

Para los que no les funcione con la version actual de graphQL.
Usen este comando en su terminal , para que les instale la versión con la que se está trabajando en el curso.

$ npm i graphql@14.2.1

Para a los que les presenta el error “Expected undefined to be a GraphQL schema.” en la version 15.8.0 de graphQl ese problema fue solventado. A la hora de instalar utilizen el comando ```
npm install [email protected]

DATO!
También existe el tiipo de campo ID!

Con el comando npx del profe me sale:
El token ‘&&’ no es un separador de instrucciones válido en esta versión.
alguna sugerencia?

No conocía el ‘use strict’

COMANDOS
npx ========> npm i -g npx
graphQL ====> npm i graphql
necesarios ==> npx license mit > LICENSE && npx gitignore node && git init && npm init -y

Si quieren que su terminal se vea similar pueden instalar esto.
Para Bash
Pata ZSH

Que maluco esos colores en ese editor, y los caracteres se ven muy raros

Ejecuté el comando pero no me cambio la licencia ISC. ¿Cual puede ser la solución?

¿y si no tengo un tipo definido como le pongo?, no hay algo como any?

el 172.1k que se refieres
codigo de teclado para las comillas hacia las izquierda
antemano gracias

Que debo hacer ?

no se que hacer con esto!! alguna idea?

npm ERR! code ENOLOCAL
npm ERR! Could not install from "Cordero\AppData\Roaming\npm-cache\_npx\18168" as it does not contain a package.json file.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\Fernando Cordero\AppData\Roaming\npm-cache\_logs\2019-09-21T16_05_39_642Z-debug.log
Install for [email protected] failed with code 1```

Excelente inicio.

Tengo una duda. ¿A que hace refrencia el 172.1k que aparece en su codigo despues de require(graphql)? yo estoy trabajandio desde una terminal linux y para que el codigo me funcionara correctamente tuve que omitir ese numero.

npm vs npx — What’s the Difference?

https://www.freecodecamp.org/news/npm-vs-npx-whats-the-difference/

Usando async/await se vería así:

"use strict";

const { graphql, buildSchema } = require("graphql");

const schema = buildSchema(`type Query {
    hello: String, 
}`);

const getAndPrintData = async () => {
  const data = await graphql(
    schema,
    `
      {
        hello
      }
    `
  );
  console.log("data >>", data);
};

getAndPrintData();

Sí alguien tiene este error

The token '&&' is not a valid statement separator in this version.

por favor intentar correr el comando desde gitbash

npx gitignore ----- GRANDIOSOOO COMANDO!

'use strict'

const { graphql, buildSchema } = require('graphql')

//definiendo el esquema
const schema = buildSchema(`
    type Query {
        hello: String
    }
`)

//ejecutar el query hello
graphql(schema, '{hello}').then((data) => {
    console.log(data)
})