GraphQL - Schema

Uno schema GraphQL è al centro di qualsiasi implementazione del server GraphQL. Descrive le funzionalità disponibili per le applicazioni client che si connettono ad esso. Possiamo usare qualsiasi linguaggio di programmazione per creare uno schema GraphQL e costruire un'interfaccia attorno ad esso.

Il runtime di GraphQL definisce uno schema generico basato su grafici per pubblicare le capacità del servizio dati che rappresenta. Le applicazioni client possono interrogare lo schema nell'ambito delle sue capacità. Questo approccio separa i client dai server e consente sia l'evoluzione che la scalabilità in modo indipendente.

In questo capitolo, utilizziamo il server Apollo per eseguire query GraphQL. IlmakeExecutableSchema la funzione in graphql-tools ti aiuta a legare schema e risolutori.

Sintassi della funzione makeExecutableSchema

Il makeExecutableSchemafunzione accetta un singolo argomento {} di tipo Object. La sintassi per l'utilizzo di questa funzione è fornita di seguito:

import { makeExecutableSchema } from 'graphql-tools';

const jsSchema = makeExecutableSchema({
   typeDefs,
   resolvers, // optional
   logger, // optional
   allowUndefinedInResolve = false, // optional
   resolverValidationOptions = {}, // optional
   directiveResolvers = null, // optional
   schemaDirectives = null,  // optional
   parseOptions = {},  // optional
   inheritResolversFromInterfaces = false  // optional
});

Sr.No. Parametro e descrizione
1

typeDefs

Questo è un argomento obbligatorio. Rappresenta una query GraphQL come una stringa UTF-8.

2

Resolvers

Questo è un argomento opzionale (oggetto vuoto per impostazione predefinita). Questo ha funzioni che gestiscono la query.

3

logger

Questo è un argomento facoltativo e può essere utilizzato per stampare gli errori sulla console del server.

4

parseOptions

Questo è un argomento facoltativo e consente la personalizzazione dell'analisi quando si specifica typeDefs come stringa.

5

allowUndefinedInResolve

Questo è vero per impostazione predefinita. Quando è impostato su false, le funzioni di risoluzione generano errori se restituiscono undefined.

6

resolverValidationOptions

Questo è un argomento opzionale e accetta un oggetto con proprietà booleane.

7

inheritResolversFromInterfaces

Questo è un argomento opzionale e accetta un argomento booleano per controllare l'ereditarietà degli oggetti dei resolver.

Illustrazione

Creiamo una semplice applicazione per comprendere questo schema. Questo creerà uno schema per interrogare l'elenco degli studenti dal server. I dati degli studenti verranno archiviati in un file flat e utilizzeremo un modulo nodo chiamatonotarealdb per falsificare un database e leggere dal file flat.

Passaggio 1: scaricare e installare le dipendenze richieste per il progetto

Crea una cartella denominata schema-app. Cambia la tua directory in schema-app dal terminale. Quindi, seguire i passaggi da 3 a 5 spiegati nel capitolo Configurazione dell'ambiente per completare il download e il processo di installazione.

Passaggio 2: creare uno schema

Inserisci schema.graphql file nella cartella del progetto, schema-app e aggiungi il seguente codice -

type Query {
   greeting:String
   students:[Student]
}

type Student {
   id:ID!
   firstName:String
   lastName:String
   password:String
   collegeId:String
}

La radice dello schema sarà il tipo Query. La query ha due campi: saluto e Studenti che restituisce rispettivamente String e un elenco di studenti. Student è dichiarato come un tipo di oggetto poiché contiene più campi. Il campo ID viene dichiarato come non annullabile.

Passaggio 3: creazione del risolutore

Crea un file resolvers.js nella cartella del progetto e aggiungi il seguente codice -

const db = require('./db')
const Query = {
   greeting:() => {
      return "hello from  TutorialsPoint !!!"
   },
   students:() => db.students.list()
}

module.exports = {Query}

Qui il saluto e gli studenti sono i risolutori che gestiscono la query. students resolver functionrestituisce un elenco di studenti dal livello di accesso ai dati. Per accedere alle funzioni del resolver al di fuori del modulo, l'oggetto Query deve essere esportato utilizzandomodule.exports.

Passaggio 4: eseguire l'applicazione

Creare un file server.js e fare riferimento al passaggio 8 nel capitolo Configurazione dell'ambiente. Il passaggio successivo consiste nell'eseguire il comando npm start nel terminale. Il server sarà attivo e funzionante sulla porta 9000. Qui, usiamo GraphiQL come client per testare l'applicazione. Apri il browser e digita l'URL,http://localhost:9000/graphiql.

Digita la seguente query nell'editor:

{
   greeting
   students {
      id
      firstName
      lastName
   }
}

La query visualizzerà l'output come mostrato di seguito:

Note- Possiamo sostituire students.json con una chiamata API RESTful per recuperare i dati degli studenti o anche un database reale come MySQL o MongoDB. GraphQL diventa un sottile involucro attorno al livello dell'applicazione originale per migliorare le prestazioni.