Dans GraphQL, quelle est la signification des termes «arêtes» et «nœud»?


100

Je consomme un point de terminaison GraphQL particulier et bien que je fournisse une structure JSON propre en tant que requête, lorsque j'obtiens les résultats, j'obtiens des balises "bords" et "nœud". Il semble que cela pollue mes données sans avantage évident. Pourquoi existe-t-il et est-il possible de s'en débarrasser pour une analyse plus rapide et plus simple des données?


1
Connexions, arêtes et nœuds est une terminologie principalement utilisée dans le contexte de Relay, le client GraphQL. Plus d'informations peuvent être trouvées dans cette FAQ .
marktani

2
Juste pour clarifier: les connexions ne sont pas spécifiques au relais. Pour un aperçu détaillé, consultez cet article: medium.com/p/explaining-graphql-connections-c48b7c3d6976
helfer

C'est un peu une manière standard de fournir une pagination pour de longues listes de résultats. Pas lié à une implémentation.
Matt

Réponses:


64

Commençons par une courte introduction en mots simples


Spécifications du relais GraphQl

  • mécanisme de récupération d'un objet
  • description de la façon de parcourir les connexions
  • structure autour des mutations pour les rendre prévisibles

Connexions:

  • une connexion est une collection d'objets avec des métadonnées telles que edges , pageInfo...
  • PAGEINFO contiendra hasNextPage, hasPreviousPage, startCursor,endCursor

    • hasNextPage nous dira s'il y a plus d'arêtes disponibles, ou si nous avons atteint la fin de cette connexion.
  • Le tableau des enregistrements: les arêtes

    • les bords vous offriront la flexibilité d'utiliser vos données (nœud)
    • les bords vous aideront pour la pagination, Il y a graphql GraphQLListmais sans fonctionnalité telle que la pagination, uniquement avec un tableau d'objets (données)
  • Chaque bord a

    • a node: un enregistrement ou une donnée
    • a cursor: chaîne encodée en base64 pour aider à relayer avec la pagination

https://facebook.github.io/relay/graphql/connections.htm

Nœud:

  • vous pouvez définir le nombre de nœuds que vous devez afficher à l'aide du relais connectionArgs(first, last, after, before)

La pagination de relais fonctionne comme

  • Récupère tous les objets de la collection et renvoie une tranche basée sur les first/lastenregistrements x, utilisée via connectionArgs

  • after/before servent à indiquer au serveur GraphQL le nombre de tranches (données) requises à l'aide du curseur du nœud

Il y a beaucoup de choses à considérer plus comme nodeDefinitions, globalFieldId,nodeInterfaces

https://github.com/graphql/graphql-relay-js#object-identification


17
Je pense que cette réponse a l'essentiel, mais elle contient de nombreuses idées fausses. Cet article explique assez bien le raisonnement derrière les connexions GraphQL
helfer

6
où trouvez-vous les idées fausses, ce n'est que de brèves informations, si vous avez trouvé des idées fausses, vous pouvez toujours l'améliorer pour l'améliorer
p0k8_

Puis-je travailler avec ces constructions via l' interface graphique Graphql ? Par exemple, hasNextPage , ou sont-ils disponibles uniquement via JS avec Relay?
Ska

oui, vous pouvez travailler dessus à partir de l'interface graphique graphiql en utilisant graphql-relay
p0k8_

non each node will have a cursor, plutôt each edge will have a cursor, référez-vous à blog.apollographql.com
vent du
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.