Je lis GraphQL
documentation où Query
et Mutation
sont décrits. Cependant, il y a un manque d'exemples réels qui montrent et/ou décrivent la différence entre eux, et surtout - quand est-il approprié de l'utiliser.
Merci beaucoup pour les explications.
Conventionnellement:
Query
- pour interroger des données (SELECT
opérations)Mutation
- pour créer de nouvelles données et mettre à jour/supprimer des données existantes (INSERT
, UPDATE
, DELETE
)Techniquement toute requête GraphQL pourrait être implémentée pour provoquer une écriture de données . Mais il existe une convention selon laquelle toutes les opérations qui provoquent des écritures doivent être envoyées explicitement via une mutation.
Outre la différence dans la sémantique, il y a une différence technique importante :
Query
champs peuvent être exécutés en parallèle par le moteur GraphQL tandis que Mutation
champs de niveau supérieur DOIT s'exécuter en série selon la spécification:
Si l'opération est une mutation, le résultat de l'opération est le résultat de l'exécution de la sélection de niveau supérieur de la mutation définie sur le type d'objet racine de mutation. Ce jeu de sélection doit être exécuté en série .
Il est prévu que les champs de niveau supérieur dans une opération de mutation produisent des effets secondaires sur le système de données sous-jacent. L'exécution en série des mutations fournies garantit contre les conditions de concurrence lors de ces effets secondaires.
Source: https://graphql.github.io/graphql-spec/draft/#sec-Mutation
En termes simples, la requête est une instruction SELECT et la mutation est une opération INSERT.
La requête dans graphql est utilisée pour récupérer les données tandis que la mutation est utilisée pour l'opération INSERT/UPDATE/DELETE.
requête = SELECT
mutation = INSÉRER, METTRE À JOUR, SUPPRIMER
pensez à [~ # ~] reste [~ # ~] :
requête => [~ # ~] obtenez [~ # ~] , mutation => [~ # ~] poster [~ # ~] , [~ # ~] mettre [~ # ~] , [~ # ~] patch [~ # ~] , [ ~ # ~] supprimer [~ # ~]