In GraphQL what's the meaning of "edges" and "node"?

JsonGraphql

Json Problem Overview


I am consuming a GraphQL endpoint and I get results that contain edges and node tags. I am supplying a clean JSON structure for my query, so this doesn't make sense to me.

It seems as if the GraphQL server is polluting my data with no obvious benefit. Why are these terms included in the GraphQL endpoint's response and is it possible to get rid of those for faster/simpler parsing of data?

Json Solutions


Solution 1 - Json

Let's begin with a short introduction in simple words


GraphQl Relay specifications

  • mechanism for refetching an object
  • description of how to page through connections
  • structure around mutations to make them predictable

Connections:

  • a connection is a collection of objects with metadata such as edges, pageInfo...

  • pageInfo will contain hasNextPage, hasPreviousPage, startCursor, endCursor

    • hasNextPage will tell us if there are more edges available, or if we’ve reached the end of this connection.
  • The array of records: edges

    • edges will provide you flexibility to use your data(node)
    • edges will help you for the pagination, There is graphql GraphQLList but with no functionality such as pagination, only with array of objects (data)
  • Each edge has

    • a `node`: a record or a data
      
    • a `cursor`: base64 encoded string to help relay with pagination
      

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

Node:

  • you can set the number of nodes you need to show using the relay `connectionArgs(first, last, after, before)`
    

Relay Pagination works as

  • Fetches all objects in the collection and return a slice based on the first/last x records, used thru connectionArgs

  • after/before are used to indicate to the GraphQL server the number of required slice (data) using cursor from the node

There are many more things to consider like nodeDefinitions, globalFieldId, nodeInterfaces

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

Solution 2 - Json

GraphQL stands for Graph Query Language, and has two parts: the server and client. The server effectively puts a graph structure in front of your database and your queries are traversing that graph.

In computer science:

  • a graph is a network
  • a node is one of the vertices in that network
  • an edge is one of the links between the nodes

Take all of this together, a GraphQL query effectively asks the GraphQL server instance to traverse its graph of data and find some representation of that data. You'll see edges and node in your queries because you're literally looking at those entries in the graph.

Typical query for allXYZ records will look like this:

{
  _allXYZ {
    edges {
      node {
        // your data shape will be in here
      }
    }
  }
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSkaView Question on Stackoverflow
Solution 1 - JsonParwat KunwarView Answer on Stackoverflow
Solution 2 - JsonserraosaysView Answer on Stackoverflow