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?
4
2 Answers
Reset to default
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 asedges
,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
- a
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
7
-
25
I think this answer has the gist right, but it contains many misconceptions. This article explains the reasoning behind GraphQL connections pretty well: medium.com/p/explaining-graphql-connections-c48b7c3d6976
– helferMar 6, 2017 at 16:37
-
8
where do you find the misconceptions, it’s just the brief information, if you found any misconceptions, you can always improve it to make it better
– parwatcodesMar 6, 2017 at 16:39
-
Can I work with these constructs through graphql UI? For example hasNextPage, or are they available only through JS with Relay?
– SkaMar 14, 2017 at 8:00
-
yes, you can work on these from graphiql UI using graphql-relay
– parwatcodesMar 14, 2017 at 9:00
-
9
This answer leans too much on an existing understanding of GraphQL terminology. It’s more a list of the terms rather than an explanation.
– Alexander TrauzziFeb 10, 2021 at 3:25
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
}
}
}
}
Not the answer you’re looking for? Browse other questions tagged
or ask your own question.
or ask your own question.
Connections, edges and nodes is terminology mainly used in the context of Relay, the GraphQL client. More information can be found in this FAQ.
Mar 6, 2017 at 12:42
Just to clarify: connections are not a Relay-specific thing. For an in-depth look, see this article: medium.com/p/explaining-graphql-connections-c48b7c3d6976
Mar 6, 2017 at 16:36
Its somewhat of a standard way of providing paging for long lists of results. Not tied to any implementation.
Oct 18, 2019 at 9:02
graphql.org/learn/pagination
Oct 18, 2019 at 9:03
|