In GraphQL qual è il significato di "bordi" e "nodo"?


100

Sto consumando un particolare endpoint GraphQL e sebbene fornisca una struttura JSON pulita come query, quando ottengo i risultati ottengo i tag "edge" e "node". Sembra che stia inquinando i miei dati senza alcun beneficio evidente. Perché è presente ed è possibile sbarazzarsene per un'analisi più rapida e semplice dei dati?


1
Connessioni, bordi e nodi è la terminologia utilizzata principalmente nel contesto di Relay, il client GraphQL. Ulteriori informazioni possono essere trovate in questa FAQ .
marktani

2
Giusto per chiarire: le connessioni non sono una cosa specifica di Relay. Per uno sguardo approfondito, consulta questo articolo: medium.com/p/explaining-graphql-connections-c48b7c3d6976
helfer

È un modo un po 'standard di fornire la paginazione per lunghi elenchi di risultati. Non legato a nessuna implementazione.
Matt

Risposte:


64

Cominciamo con una breve introduzione in parole semplici


Specifiche del relè GraphQl

  • meccanismo per recuperare un oggetto
  • descrizione di come sfogliare le connessioni
  • struttura intorno alle mutazioni per renderle prevedibili

Collegamenti:

  • una connessione è una raccolta di oggetti con metadati come edges, pageInfo...
  • PageInfo conterrà hasNextPage, hasPreviousPage, startCursor,endCursor

    • hasNextPage ci dirà se sono disponibili più bordi o se abbiamo raggiunto la fine di questa connessione.
  • La serie di record: bordi

    • edge ti fornirà flessibilità per utilizzare i tuoi dati (nodo)
    • bordi ti aiuteranno per l'impaginazione, c'è graphql GraphQLListma senza funzionalità come l'impaginazione, solo con array di oggetti (dati)
  • Ogni bordo ha

    • un' node : un record o un dato
    • a cursor: stringa codificata in base64 per facilitare l'inoltro con l'impaginazione

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

Nodo:

  • puoi impostare il numero di nodi che devi mostrare usando il relè connectionArgs(first, last, after, before)

L'impaginazione del relè funziona come

  • Recupera tutti gli oggetti nella raccolta e restituisce una sezione basata sui first/lastrecord x, utilizzati tramite connectionArgs

  • after/before sono usati per indicare al server GraphQL il numero di slice (dati) richiesti usando il cursore dal nodo

Ci sono molte cose più da considerare come nodeDefinitions, globalFieldId,nodeInterfaces

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


17
Penso che questa risposta abbia il succo giusto, ma contiene molte idee sbagliate. Questo articolo spiega abbastanza bene il ragionamento alla base delle connessioni GraphQL
helfer

6
dove trovi le idee sbagliate, sono solo le brevi informazioni, se hai trovato delle idee sbagliate, puoi sempre migliorarle per renderle migliori
p0k8_

Posso lavorare con questi costrutti tramite l' interfaccia utente graphql ? Ad esempio hasNextPage o sono disponibili solo tramite JS con Relay?
Ska

sì, puoi lavorare su questi dall'interfaccia utente graphiql usando graphql-relay
p0k8_

non each node will have a cursor, piuttosto each edge will have a cursor, rimando a quel blog.apollographql.com/…
vento
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.