Syntaxe des opérations GraphQL
Dernière mise à jour
Dernière mise à jour
Nous avons déjà vu comment . Nous allons maintenant détailler l'écriture d'une opération.
Une opération est constituée des éléments suivants :
le type de l'opération, toujours précisé en premier
l'identifiant de l'opération, c'est-à-dire son chemin dans le graphe des opérations
les variables d'opération et leurs valeurs
le schéma de la réponse, qui permet de sélectionner le niveau d'informations retournées par l'API.
Nous nous servirons de l'opération de logActivity
pour illustrer chacun de ces constituants :
L'API Mobilic utilise deux types d'opération définis par le standard GraphQL :
query
pour toutes les opérations de lecture qui ne modifient pas l'état du système
mutation
pour toutes les opérations qui vont modifier l'état du système (création, édition, suppression)
L'opération de logActivity
crée une nouvelle activité pour un utilisateur, elle est logiquement une mutation
.
L'opération de logactivity
a été regroupée avec les autres opérations relatives aux activités. Son chemin complet dans les opérations de mutation est activities -> logActivity
.
Elles sont précisées entre parenthèses à côté de l'opération concernée. Dans le cas de l'opération de logActivity
il y a quatre variables, userId
, missionId
, startTime
et type
.
La syntaxe GraphQL permet de définir les variables dans l'opération mais de préciser leurs valeurs en dehors. Par exemple l'opération de login
peut s'écrire :
Le corps JSON de la requête HTTP doit alors contenir un champ variables
qui définit pour chaque variable la valeur à injecter :
C'est une fonctionnalité très puissante de GraphQL : la possibilité de personnaliser la réponse de l'API parmi le graphe des objets.
Par exemple pour l'opération de logActivity
on peut ne demander en retour que l'identifiant de l'activité créée :
Ce fonctionnement prend tout son sens pour les objets complexes avec un fort niveau d'imbrication : par exemple une entreprise, auxquels sont rattachés des utilisateurs, qui effectuent des missions, qui elles-mêmes regroupent plusieurs activités. En fonction de ses besoins l'appelant est libre de récupérer un graphe d'objets plus ou moins profond.
Le corps de la réponse sera au format JSON, et suivra le schéma de la requête, comme défini dans les . Dans l'exemple précédent le JSON de retour contiendra un champ data
(toujours présent dans le cas d'une requête sans erreurs), contenant un champ auth
qui contient lui-même un champ login
et ainsi de suite :