đ Lancement de Gato GraphQL v0.7, avec support des mutations et nested mutations !
La version 0.7 de Gato GraphQL, avec support des mutations et des nested mutations, a Ă©tĂ© lancĂ©e ! đ

Voici un tour d'horizon des nouveautés.
1. Mutations ! đ
Les mutations GraphQL permettent de modifier des donnĂ©es (c'est-Ă -dire d'effectuer des effets de bord) via la requĂȘte.
Les mutations étaient le grand élément encore manquant dans Gato GraphQL. Maintenant qu'elles ont été ajoutées, je peux affirmer que ce serveur GraphQL est pratiquement complet en termes de fonctionnalités (seules les subscriptions manquent, et je réfléchis déjà à la façon de les ajouter).

Voyons un exemple en ajoutant un commentaire. Mais d'abord, nous devons exécuter une autre mutation pour vous connecter, afin que vous puissiez ajouter des commentaires. Appuyez sur le bouton "Run" dans le client GraphiQL ci-dessous, pour exécuter le champ mutation loginUser avec un utilisateur de test pré-créé :
mutation LogUserIn {
loginUser(
by: { credentials: { usernameOrEmail: "test", password: "pass" } }
) {
id
name
}
}Maintenant, ajoutons quelques commentaires. Appuyez sur le bouton Run ci-dessous, pour ajouter un commentaire à une publication en exécutant le champ mutation addCommentToCustomPost (vous pouvez également modifier le texte du commentaire) :
mutation AddComment {
addCommentToCustomPost(
input: { customPostID: 1459, comment: "Adding a comment: bla bla bla" }
) {
id
content
date
}
}Dans cette premiÚre version, le plugin est livré avec les mutations suivantes :
â
createPost
â
updatePost
â
setFeaturedImageforCustomPost
â
removeFeaturedImageforCustomPost
â
addCommentToCustomPost
â
replyComment
â
loginUser
â
logoutUser
2. Nested Mutations ! đđ
Les nested mutations sont la capacité d'effectuer des mutations sur un type autre que le root type dans GraphQL.
Elles ont Ă©tĂ© demandĂ©es pour la spĂ©cification GraphQL mais pas encore approuvĂ©es (et ne le seront peut-ĂȘtre jamais), donc Gato GraphQL ajoute leur support en tant que fonctionnalitĂ© opt-in, via le module Nested Mutations.
Ainsi, le plugin supporte les 2 comportements :
- Le comportement GraphQL standard (c'est-à -dire l'ajout de champs mutation au root type), par défaut
- Les nested mutations, en tant qu'opt-in
Par exemple, la requĂȘte ci-dessus peut Ă©galement ĂȘtre exĂ©cutĂ©e avec la requĂȘte suivante, dans laquelle nous rĂ©cupĂ©rons d'abord la publication via Root.post, puis lui ajoutons un commentaire via Post.addComment :
mutation AddComment {
post(by: { id: 1459 }) {
addComment(
input: {
comment: "Notice how field `addCommentToCustomPost` under the `Root` type is renamed as `addComment` under the `Post` type? The schema got neater!"
}
) {
id
content
date
}
}
}Les mutations peuvent Ă©galement modifier des donnĂ©es sur le rĂ©sultat d'une autre mutation. Dans la requĂȘte ci-dessous, nous obtenons d'abord la publication via Root.post, puis exĂ©cutons la mutation Post.addComment sur elle et obtenons l'objet commentaire créé, et enfin exĂ©cutons la mutation Comment.reply sur lui :
mutation AddCommentAndResponse {
post(by: { id: 1459 }) {
id
title
addComment(input: { comment: "Isn't this awesome?" }) {
id
date
content
reply(input: { comment: "I think so!" }) {
id
date
content
}
}
}
}C'est vraiment utile ! đ (La mĂ©thode alternative pour produire ce mĂȘme comportement, en une seule requĂȘte, est via la directive @export... Je comparerai les deux dans un prochain article de blog).
Dans cette premiÚre version, le plugin est livré avec les mutations suivantes :
â
CustomPost.update
â
CustomPost.setFeaturedImage
â
CustomPost.removeFeaturedImage
â
CustomPost.addComment
â
Comment.reply
Standard ou nested ? Ou les deux ?
Vous pouvez avoir une API GraphQL utilisée par votre propre application, et également disponible publiquement pour vos clients. Vous pouvez vouloir activer les nested mutations uniquement pour votre propre application, pas pour vos clients car il s'agit d'une fonctionnalité non standard.
Bonne nouvelle : c'est possible.
J'ai ajouté une section "Mutation Scheme" dans la Schema Configuration, qui est utilisée pour personnaliser le schéma pour les Custom Endpoints et les Persisted Queries :

Ainsi, vous pouvez dĂ©sactiver les nested mutations partout, mais les activer uniquement pour un custom endpoint spĂ©cifique que seule votre application utilisera. đȘ
Suppression des champs redondants du root type
Avec les nested mutations, les champs mutation peuvent ĂȘtre ajoutĂ©s deux fois au schĂ©ma :
- une fois sous le root type
- une fois sous le type spécifique
Par exemple, ces champs peuvent ĂȘtre considĂ©rĂ©s comme des "doublons" l'un de l'autre :
Root.updatePostPost.update
Gato GraphQL permet de conserver les deux, ou de supprimer ceux du root type, qui sont redondants.
Les 3 schémas suivants :
- Comportement standard :
il utilise les typesQueryRootpour gĂ©rer les requĂȘtes etMutationRootpour gĂ©rer les mutations - Nested mutations en conservant les champs mutation en double :
un seul typeRootgĂšre les requĂȘtes et les mutations, et les champs mutation redondants dans ce type sont conservĂ©s - Nested mutations en supprimant les champs mutation redondants du root type :
identique au précédent, mais en supprimant tous les champs mutation redondants du typeRoot
â± BTW1, ces 3 schĂ©mas utilisent tous le mĂȘme endpoint, mais en changeant un paramĂštre URL ?mutation_scheme vers les valeurs standard, nested et lean_nested. C'est possible parce que le serveur GraphQL suit l'approche code-first. đ€
â± BTW2, ces options peuvent ĂȘtre sĂ©lectionnĂ©es dans la section "Mutation Scheme" dans la Schema configuration (montrĂ©e ci-dessus), donc vous pouvez Ă©galement dĂ©cider quel comportement appliquer pour des custom endpoints et persisted queries individuels. đ
Il est maintenant temps de commencer Ă prĂ©parer la v0.8 ! đ