GraphQL - Système de types
GraphQL est un langage fortement typé. Le système de types définit divers types de données pouvant être utilisés dans une application GraphQL. Le système de types aide à définir le schéma, qui est un contrat entre le client et le serveur. Les types de données GraphQL couramment utilisés sont les suivants:
N ° Sr. | Types et description |
---|---|
1 | Scalar Stocke une valeur unique |
2 | Object Montre quel type d'objet peut être récupéré |
3 | Query Type de point d'entrée vers d'autres types spécifiques |
4 | Mutation Point d'entrée pour la manipulation des données |
5 | Enum Utile dans une situation où vous avez besoin que l'utilisateur choisisse parmi une liste d'options prescrite |
Type scalaire
Les types scalaires sont des types de données primitifs qui ne peuvent stocker qu'une seule valeur. Les types scalaires par défaut proposés par GraphQL sont -
Int - Entier 32 bits signé
Float - Valeur à virgule flottante double précision signée
String - UTF - séquence de 8 caractères
Boolean - Vrai ou faux
ID - Un identifiant unique, souvent utilisé comme identifiant unique pour récupérer un objet ou comme clé pour un cache.
La syntaxe pour définir un type scalaire est la suivante -
field: data_type
L'extrait de code ci-dessous définit un champ nommé salutation qui renvoie une valeur de chaîne.
greeting: String
Type d'objet
Le type d'objet est le type le plus couramment utilisé dans un schéma et représente un groupe de champs. Chaque champ à l'intérieur d'un type d'objet correspond à un autre type, permettant ainsi des types imbriqués. En d'autres termes, un type d'objet est composé de plusieurs types scalaires ou types d'objet.
La syntaxe pour définir un type d'objet est donnée ci-dessous -
type object_type_name
{
field1: data_type
field2:data_type
....
fieldn:data_type
}
Vous pouvez considérer l'extrait de code suivant -
--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'exemple donné ci-dessus définit un objet de type de données Student. Le champ stud_details dans le schéma de requête racine renverra une liste d'objets Student.
Type de requête
Une requête GraphQL est utilisée pour récupérer des données. C'est comme demander une ressource dans les API REST. Pour faire simple, le type de requête est la requête envoyée d'une application cliente au serveur GraphQL. GraphQL utilise leSchema Definition Language (SDL)pour définir une requête. Le type de requête est l'un des nombreux types de niveau racine dans GraphQL.
La syntaxe pour définir une requête est la suivante -
type Query {
field1: data_type
field2:data_type
field2(param1:data_type,param2:data_type,...paramN:data_type):data_type
}
Un exemple de définition d'une requête -
type Query {
greeting: String
}
Type de mutation
Les mutations sont des opérations envoyées au serveur pour create, update ou deleteLes données. Ils sont analogues aux verbes PUT, POST, PATCH et DELETE pour appeler les API REST.
La mutation est l'un des types de données de niveau racine dans GraphQL. Le type Query définit les points d'entrée pour les opérations de récupération de données tandis que le type Mutation spécifie les points d'entrée pour les opérations de manipulation de données.
La syntaxe pour définir un type de mutation est donnée ci-dessous -
type Mutation {
field1: data_type
field2(param1:data_type,param2:data_type,...paramN:data_type):data_type
}
Par exemple, nous pouvons définir un type de mutation pour ajouter un nouvel étudiant comme ci-dessous -
type Mutation {
addStudent(firstName: String, lastName: String): Student
}
Type d'énumération
Un Enum est similaire à un type scalaire. Les énumérations sont utiles dans une situation où la valeur d'un champ doit provenir d'une liste d'options prescrite.
La syntaxe pour définir un type Enum est -
type enum_name{
value1
value2
}
L'extrait de code suivant illustre comment un type enum peut être défini -
type Days_of_Week{
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
}
Type de liste
Les listes peuvent être utilisées pour représenter un tableau de valeurs d'un type spécifique. Les listes sont définies avec un modificateur de type [] qui encapsule les types d'objets, les scalaires et les énumérations.
La syntaxe suivante peut être utilisée pour définir un type de liste -
field:[data_type]
L'exemple ci-dessous définit un type de liste todos -
type Query {
todos: [String]
}
Type non nul
Par défaut, chacun des types scalaires principaux peut être défini sur null. En d'autres termes, ces types peuvent soit renvoyer une valeur du type spécifié, soit ne pas avoir de valeur. Pour remplacer cette valeur par défaut et spécifier qu'un champ doit être défini, un point d'exclamation (!) Peut être ajouté à un type. Cela garantit la présence de valeur dans les résultats renvoyés par la requête.
La syntaxe suivante peut être utilisée pour définir un champ non nullable -
field:data_type!
Dans l'exemple ci-dessous, stud_id est déclaré comme un champ obligatoire.
type Student {
stud_id:ID!
firstName:String
lastName:String
fullName:String
college:College
}