Gato GraphQL vs WPGraphQL
Comparaison entre Gato GraphQL et WPGraphQL


Si vous avez seulement besoin de créer un site WordPress headless et de le déployer en statique, et que vous utilisez actuellement WPGraphQL, passer à Gato GraphQL ne fera aucune différence.
Dans les autres cas, passer Ă Gato GraphQL offre de nombreux avantages. Voici les avantages fournis par Gato GraphQL + toutes les extensions, que WPGraphQL ne propose pas.
Tableau récapitulatif
| Fonctionnalité | Gato GraphQL | WPGraphQL |
|---|---|---|
| Problème N+1 | Ce n'est pas un problème grâce à la conception architecturale | Peut être un problème si non géré ; le développeur doit en être conscient |
| Sécurité : désactivation de l'endpoint | Peut désactiver entièrement l'endpoint unique avec les persisted queries (PRO) | Non disponible |
| Contrôle d'accès | Validation champ par champ, avec rôles/capacités/IP, via UI (PRO) | Pas au niveau des champs, moins granulaire |
| Contrôle du cache | max-age calculé automatiquement pour les requêtes (PRO) | Pas de contrôle de cache automatique |
| Endpoints personnalisés | Endpoints multiples, protégés par mot de passe/personnalisables ; hiérarchie d'endpoints prise en charge (PRO) | Endpoint unique, personnalisation limitée |
| Mises à jour en masse et recherche/remplacement | Suppression en masse, étiquetage, remplacement (avec regex), via GraphQL (PRO) | Non disponible |
| Fonctionnalités GraphQL personnalisées/expérimentales | Mutations imbriquées, schema namespacing, oneOf input object | Principalement la spécification GraphQL standard |
| Multiple Query Execution (composabilité) | Plusieurs requêtes dans un document, partage d'état avec @export | Requêtes en lot (plusieurs par requête), mais ne peuvent pas partager d'état |
| Endpoints internes/privés | Endpoint privé pour le backend/PHP uniquement, non exposé aux utilisateurs (PRO) | Non disponible |
| Mutation de données riche | Récupérer, modifier et persister les données dans un seul document (PRO) | Non pris en charge |
| Synchronisation et distribution de contenu | Import/export via GraphQL, RSS, CSV, REST API (PRO) | Non disponible |
| Intégration de services web | Appels API sortants/entrants et webhooks (PRO) | Non pris en charge |
| Automatisation (hooks/flux de travail) | GraphQL comme automatisation de flux de travail (PRO/éditeur UI) | Non disponible |
| Facilité d'utilisation (intégration UI) | Fonctionnalités UI étendues pour créer/administrer des requêtes GraphQL | UI d'administration plus basique |
| Batching/composabilité | Composition de champs/directives, logique de résolveur réutilisable (PRO) | Non pris en charge |
| Multiple Query Execution | Pris en charge, avec état partagé et dépendances | Pris en charge, sans partage d'état |
| Utilisation headless/statique standard | Les deux sont également capables | Les deux sont également capables |
Légende :
- (PRO): Indique que la fonctionnalité nécessite la version payante/pro ou les extensions de Gato GraphQL.
Résumé des points clés :
- Gato GraphQL offre des fonctionnalités supplémentaires importantes pour le développement avancé, l'automatisation et la sécurité
- Les deux plugins sont équivalents pour les installations WordPress statiques/headless de base
- Les fonctionnalités avancées de Gato GraphQL se concentrent sur :
- Le contrĂ´le granulaire
- L'automatisation des flux de travail
- Les intégrations riches
- Les fonctionnalités GraphQL expérimentales modernes
Facilité de développement
Les développeurs n'ont pas à se préoccuper du problème des requêtes "n+1" : en raison de la conception architecturale du serveur GraphQL, cela ne se produit tout simplement pas.
Sécurité
Lorsque vous utilisez des persisted queries pour exposer des données prédéfinies, vous pouvez désactiver complètement l'endpoint unique GraphQL, de sorte qu'il ne soit pas accessible même aux utilisateurs authentifiés.

Contrôle d'accès
Vous pouvez valider que seuls les utilisateurs connectés, ou les utilisateurs avec un certain rôle ou une certaine capacité, ou les visiteurs d'une certaine plage IP, peuvent accéder aux données, champ par champ (PRO).

ContrĂ´le du cache
Lors de la mise en cache de la réponse GraphQL avec le cache HTTP standard, l'en-tête max-age est calculé automatiquement à partir de tous les champs présents dans la requête GraphQL (PRO).

Personnalisation et gestion des endpoints
Vous pouvez fournir plusieurs endpoints personnalisés, chacun personnalisé pour un client ou une application spécifique, les protégeant via un mot de passe.
Et vous pouvez leur ajouter des catégories personnalisées et leur donner une hiérarchie (comme /graphql/customers/some-customer et /graphql/customers/another-customer).

Mises Ă jour en masse
Vous pouvez exécuter des mises à jour en masse. Par exemple, vous pouvez supprimer tous les commentaires du site, ou assigner une étiquette ou une catégorie à tous vos articles.
Et vous pouvez rechercher et remplacer une chaîne sur des centaines d'articles, par exemple pour remplacer l'ancien domaine par le nouveau, et même en utilisant une regex (PRO).
Fonctionnalités GraphQL personnalisées
Vous aurez accès à de nouvelles fonctionnalités GraphQL, proposées pour la spécification mais pas encore publiées, notamment les mutations imbriquées, le schema namespacing et l'objet d'entrée 'oneOf'.

Multiple Query Execution
WPGraphQL permet d'exécuter des requêtes en lot, où plusieurs requêtes GraphQL sont résolues dans une seule requête HTTP.
Gato GraphQL fournit la Exécution de multiples requêtes, où un seul document GraphQL peut exécuter plusieurs opérations.
Multiple Query Execution est une amélioration du batching de requêtes, car les opérations peuvent partager un état entre elles via la directive @export.
Par exemple, pour dupliquer un article, nous avons une opération query qui récupère les données de l'article et passe ces données à une opération mutation qui crée un nouvel article avec :
query GetPostAndExportData($postId: ID!)
{
post(by: { id: $postId }, status: any) {
author {
id @export(as: "authorID")
}
categories {
id @export(as: "categoryIDs", type: LIST)
}
rawContent @export(as: "rawContent")
rawExcerpt @export(as: "excerpt")
featuredImage {
id @export(as: "featuredImageID")
}
tags {
id @export(as: "tagIDs", type: LIST)
}
rawTitle @export(as: "title")
}
}
mutation DuplicatePost
@depends(on: "GetPostAndExportData")
{
createPost(input: {
status: draft,
authorBy: {
id: $authorID
},
categoriesBy: {
ids: $categoryIDs
},
contentAs: {
html: $rawContent
},
excerpt: $excerpt
featuredImageBy: {
id: $featuredImageID
},
tagsBy: {
ids: $tagIDs
},
title: $title
}) {
postID
}
}Composabilité
Vous aurez la possibilité de composer des champs, où la valeur d'un champ peut être fournie comme entrée d'un autre champ dans la même requête, permettant à un ensemble fondamental de résolveurs de champs de couvrir un nombre illimité de cas d'utilisation (PRO).
Par exemple, au lieu de créer le champ Post.hasExcerpt, nous pouvons appliquer le champ _notEmpty sur Post.excerpt pour produire la même valeur :
query {
post(by: { id: 1 }) {
excerpt
hasExcerpt: _notEmpty(value: $__excerpt)
}
}De même, vous pouvez composer des directives, de sorte qu'une directive puisse être appliquée sur une propriété interne de la valeur du champ.
Par exemple, la requête suivante traduit les noms de catégories de l'article dans une autre langue :
query {
post(by: { id: 1 }) {
title
categoryNames
frenchCategoryNames: categoryNames
@underEachArrayItem
@strTranslate(
from: "en",
to: "fr"
)
}
}Disponibilité du serveur GraphQL
Vous pouvez exposer des endpoints privés pour alimenter vos blocs Gutenberg. Et vous pouvez accéder à un serveur GraphQL privé, pour récupérer des données pour votre application via du code PHP, sans exposer aucun endpoint public (PRO).
Polyvalence dans la mutation des données
Vous pouvez utiliser GraphQL pour récupérer, modifier et finalement stocker à nouveau le contenu de votre site, le tout dans un seul document GraphQL (PRO).
Par exemple, vous pouvez récupérer tous les blocs Gutenberg dans un article, extraire leurs propriétés, traduire ces chaînes via l'API Google Translate, réinsérer ces chaînes dans le bloc, et enregistrer à nouveau l'article.
Synchronisation et distribution de contenu
Vous pouvez utiliser GraphQL pour importer des articles depuis un autre site WordPress, depuis un flux RSS, depuis un CSV, ou depuis n'importe quelle API REST ou GraphQL (PRO).
Vous pouvez exporter du contenu vers un autre site WordPress, et le stocker en JSON et CSV (PRO).
Interaction avec les services web
Vous pouvez invoquer l'API de n'importe quel service externe via un client HTTP (PRO). Par exemple, vous pouvez abonner vos utilisateurs WordPress Ă votre liste de diffusion Mailchimp.
Et vous pouvez recevoir et traiter des données entrantes de n'importe quel service via un webhook dédié (PRO). Par exemple, vous pouvez capturer les adresses email de newsletter enregistrées dans un site sandbox InstaWP et les envoyer automatiquement à Mailchimp.
Automatisation
Vous pouvez utiliser GraphQL pour automatiser des tâches et des flux de contenu (PRO).
Par exemple, lorsqu'un nouvel article est créé (événement via le hook draft_post), vous pouvez exécuter une persisted query qui vérifie si l'article n'a pas de miniature et, dans ce cas, génère une image en appelant l'API Stable Diffusion, la compresse via TinyPng, et insère finalement l'image comme image à la une de l'article.

Facilité d'utilisation
Tous ces cas d'utilisation supplémentaires peuvent être réalisés directement dans le wp-admin, en fournissant la requête GraphQL via une interface utilisateur, sans avoir à déployer de code PHP.
