I am consuming a particular GraphQL endpoint and although I am supplying a clean JSON structure as a query, when I get the results I get "edges" and "node" tags. It seems as if it is polluting my data with no obvious benefit. Why is it there and is it possible to get rid of those for faster and simpler parsing of data?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
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
- a
https://facebook.github.io/relay/graphql/connections.htm
Node:
- each node will have a cursor
- 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 connectionArgsafter/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