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
}