En GraphQL, ¿cuál es el significado de "bordes" y "nodo"?

100

Estoy consumiendo un punto final GraphQL en particular y, aunque estoy proporcionando una estructura JSON limpia como consulta, cuando obtengo los resultados obtengo etiquetas de "bordes" y "nodos". Parece que está contaminando mis datos sin ningún beneficio obvio. ¿Por qué está ahí y es posible deshacerse de ellos para un análisis de datos más rápido y simple?

Ska
fuente
1
Conexiones, bordes y nodos es la terminología que se utiliza principalmente en el contexto de Relay, el cliente GraphQL. Puede encontrar más información en estas preguntas frecuentes .
Marktani
2
Solo para aclarar: las conexiones no son algo específico del relé. Para una mirada en profundidad, consulte este artículo: medium.com/p/explaining-graphql-connections-c48b7c3d6976
helfer
Es una forma estándar de proporcionar paginación para largas listas de resultados. No vinculado a ninguna implementación.
Matt

Respuestas:

64

Comencemos con una breve introducción en palabras simples.


Especificaciones del relé GraphQl

  • mecanismo para recuperar un objeto
  • descripción de cómo navegar por las conexiones
  • estructura alrededor de mutaciones para hacerlas predecibles

Conexiones:

  • una conexión es una colección de objetos con metadatos como edges, pageInfo...
  • pageInfo contendrá hasNextPage, hasPreviousPage, startCursor,endCursor

    • hasNextPage nos dirá si hay más bordes disponibles o si hemos llegado al final de esta conexión.
  • La matriz de registros: bordes

    • Los bordes le brindarán flexibilidad para usar sus datos (nodo)
    • los bordes te ayudarán para la paginación, hay graphql GraphQLListpero sin funcionalidad como la paginación, solo con una matriz de objetos (datos)
  • Cada borde tiene

    • a node: un registro o un dato
    • a cursor: cadena codificada en base64 para ayudar a retransmitir con la paginación

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

Nodo:

  • puede establecer la cantidad de nodos que necesita mostrar usando el relé connectionArgs(first, last, after, before)

La paginación de relés funciona como

  • Obtiene todos los objetos de la colección y devuelve un segmento basado en los first/lastregistros x, utilizados a través de connectionArgs

  • after/before se utilizan para indicar al servidor GraphQL el número de segmentos (datos) necesarios mediante el cursor del nodo

Hay muchas más cosas a tener en cuenta como nodeDefinitions, globalFieldId,nodeInterfaces

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

p0k8_
fuente
17
Creo que esta respuesta tiene la esencia correcta, pero contiene muchos conceptos erróneos. Este artículo explica bastante bien el razonamiento detrás de las conexiones GraphQL
helfer
6
¿Dónde encuentras los conceptos erróneos? Es solo la información breve, si encontraste algún concepto erróneo, siempre puedes mejorarlo para hacerlo mejor
p0k8_
¿Puedo trabajar con estas construcciones a través de Graphql UI? Por ejemplo , hasNextPage , ¿o están disponibles solo a través de JS con Relay?
Ska
sí, puede trabajar en ellos desde la interfaz de usuario de graphiql usando graphql-relay
p0k8_
no each node will have a cursor, más bien each edge will have a cursor, consulte ese blog.apollographql.com/…
viento