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
}