GraphQL - Tipo di sistema

GraphQL è un linguaggio fortemente tipizzato. Type System definisce vari tipi di dati che possono essere utilizzati in un'applicazione GraphQL. Il sistema di tipi aiuta a definire lo schema, che è un contratto tra client e server. I tipi di dati GraphQL comunemente usati sono i seguenti:

Sr.No. Tipi e descrizione
1

Scalar

Memorizza un singolo valore

2

Object

Mostra il tipo di oggetto che può essere recuperato

3

Query

Tipo di punto di ingresso ad altri tipi specifici

4

Mutation

Punto di ingresso per la manipolazione dei dati

5

Enum

Utile in una situazione in cui è necessario che l'utente scelga da un elenco prestabilito di opzioni

Tipo scalare

I tipi scalari sono tipi di dati primitivi che possono memorizzare solo un singolo valore. I tipi scalari predefiniti offerti da GraphQL sono:

  • Int - Intero a 32 bit firmato

  • Float - Valore in virgola mobile a doppia precisione con segno

  • String - UTF: sequenza di 8 caratteri

  • Boolean - Vero o falso

  • ID - Un identificatore univoco, spesso utilizzato come identificatore univoco per recuperare un oggetto o come chiave per una cache.

La sintassi per definire un tipo scalare è la seguente:

field: data_type

Lo snippet fornito di seguito definisce un campo denominato saluto che restituisce un valore stringa.

greeting: String

Tipo di oggetto

Il tipo di oggetto è il tipo più comune utilizzato in uno schema e rappresenta un gruppo di campi. Ogni campo all'interno di un tipo di oggetto viene mappato a un altro tipo, consentendo così tipi nidificati. In altre parole, un tipo di oggetto è composto da più tipi scalari o tipi di oggetto.

Di seguito viene fornita la sintassi per definire un tipo di oggetto:

type object_type_name
{
   field1: data_type
   field2:data_type 
   ....
   fieldn:data_type
}

Puoi considerare il seguente frammento di codice:

--Define an object type--

type Student {
   stud_id:ID
   firstname: String
   age: Int
   score:Float
}

--Defining a GraphQL schema--  

type Query
{
   stud_details:[Student]
}

L'esempio sopra riportato definisce un oggetto di tipo di dati Student. Il campo stud_details nello schema Query radice restituirà un elenco di oggetti Student.

Tipo di query

Una query GraphQL viene utilizzata per recuperare i dati. È come richiedere una risorsa nelle API basate su REST. Per semplificare, il tipo di query è la richiesta inviata da un'applicazione client al server GraphQL. GraphQL utilizza l'estensioneSchema Definition Language (SDL)per definire una query. Il tipo di query è uno dei tanti tipi a livello di root in GraphQL.

La sintassi per la definizione di una query è la seguente:

type Query {
   field1: data_type
   field2:data_type
   field2(param1:data_type,param2:data_type,...paramN:data_type):data_type
}

Un esempio di definizione di una query:

type Query  {
   greeting: String
}

Tipo di mutazione

Le mutazioni sono operazioni inviate al server a create, update o deletedati. Questi sono analoghi ai verbi PUT, POST, PATCH e DELETE per chiamare API basate su REST.

La mutazione è uno dei tipi di dati a livello di radice in GraphQL. Il tipo Query definisce i punti di ingresso per le operazioni di recupero dei dati mentre il tipo Mutazione specifica i punti di ingresso per le operazioni di manipolazione dei dati.

Di seguito viene fornita la sintassi per definire un tipo di mutazione:

type Mutation {
   field1: data_type
   field2(param1:data_type,param2:data_type,...paramN:data_type):data_type 
}

Ad esempio, possiamo definire un tipo di mutazione per aggiungere un nuovo Studente come di seguito:

type Mutation {
   addStudent(firstName: String, lastName: String): Student
}

Tipo di enumerazione

Un Enum è simile a un tipo scalare. Le enumerazioni sono utili in una situazione in cui il valore di un campo deve provenire da un elenco di opzioni prescritto.

La sintassi per definire un tipo Enum è:

type enum_name{
   value1
   value2
}

Il frammento di codice seguente illustra come definire un tipo di enumerazione:

type Days_of_Week{
   SUNDAY
   MONDAY
   TUESDAY
   WEDNESDAY
   THURSDAY
   FRIDAY
   SATURDAY
}

Tipo di elenco

Gli elenchi possono essere utilizzati per rappresentare una matrice di valori di tipo specifico. Gli elenchi sono definiti con un modificatore di tipo [] che racchiude tipi di oggetto, scalari ed enumerazioni.

La seguente sintassi può essere utilizzata per definire un tipo di elenco:

field:[data_type]

L'esempio seguente definisce un tipo di elenco todos -

type Query {
   todos: [String]
}

Tipo non annullabile

Per impostazione predefinita, ciascuno dei tipi scalari principali può essere impostato su null. In altre parole, questi tipi possono restituire un valore del tipo specificato oppure non possono avere alcun valore. Per sovrascrivere questo valore predefinito e specificare che un campo deve essere definito, è possibile aggiungere un punto esclamativo (!) A un tipo. Ciò garantisce la presenza di valore nei risultati restituiti dalla query.

La seguente sintassi può essere utilizzata per definire un campo non annullabile:

field:data_type!

Nell'esempio seguente, stud_id è dichiarato come campo obbligatorio.

type Student {
   stud_id:ID!
   firstName:String
   lastName:String
   fullName:String
   college:College
}