Em GraphQL, qual é o significado de “arestas” e “nó”?

100

Estou consumindo um determinado ponto de extremidade GraphQL e, embora esteja fornecendo uma estrutura JSON limpa como uma consulta, quando obtenho os resultados, obtenho as tags "bordas" e "nós". Parece que está poluindo meus dados sem nenhum benefício óbvio. Por que ele existe e é possível se livrar deles para uma análise mais rápida e simples dos dados?

Ska
fonte
1
Conexões, arestas e nós é a terminologia usada principalmente no contexto do Relay, o cliente GraphQL. Mais informações podem ser encontradas neste FAQ .
marktani
2
Só para esclarecer: as conexões não são específicas do Relay. Para uma análise mais aprofundada, consulte este artigo: medium.com/p/explaining-graphql-connections-c48b7c3d6976
helfer
É uma forma padrão de fornecer paginação para longas listas de resultados. Não vinculado a nenhuma implementação.
Matt,

Respostas:

64

Vamos começar com uma breve introdução em palavras simples


Especificações do relé GraphQl

  • mecanismo para recuperar um objeto
  • descrição de como paginar pelas conexões
  • estrutura em torno de mutações para torná-los previsíveis

Conexões:

  • uma conexão é uma coleção de objetos com metadados como edges, pageInfo...
  • pageInfo conterá hasNextPage, hasPreviousPage, startCursor,endCursor

    • hasNextPage nos dirá se há mais arestas disponíveis ou se chegamos ao fim desta conexão.
  • A matriz de registros: arestas

    • bordas fornecerão flexibilidade para usar seus dados (nó)
    • bordas te ajudarão na paginação, existe o graphql GraphQLListmas sem nenhuma funcionalidade como paginação, apenas com array de objetos (dados)
  • Cada borda tem

    • a node: um registro ou um dado
    • a cursor: string codificada em base64 para ajudar a retransmitir com paginação

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

Nó:

  • você pode definir o número de nós que você precisa para mostrar usando o relé connectionArgs(first, last, after, before)

A paginação de retransmissão funciona como

  • Busca todos os objetos na coleção e retorna uma fatia com base first/lastnos registros x, usados ​​por meio de connectionArgs

  • after/before são usados ​​para indicar ao servidor GraphQL o número de fatias necessárias (dados) usando o cursor do nó

Há muito mais coisas a considerar nodeDefinitions, como globalFieldId,nodeInterfaces

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

p0k8_
fonte
17
Acho que essa resposta tem a essência certa, mas contém muitos conceitos errados. Este artigo explica muito bem o raciocínio por trás das conexões GraphQL
helfer
6
onde você encontra os equívocos, é apenas uma breve informação, se você encontrou algum equívoco, você sempre pode melhorá-lo para torná-lo melhor
p0k8_
Posso trabalhar com essas construções por meio da IU do Graphql ? Por exemplo hasNextPage , ou eles estão disponíveis apenas por meio de JS com Relay?
Ska
sim, você pode trabalhar neles a partir da interface do usuário do Graphiql usando o graphql-relay
p0k8_
não each node will have a cursor, em vez disso each edge will have a cursor, consulte blog.apollographql.com/…
vento