我是GraphQL的新手,正在使用WPGraphQL和WooGraphQL。
他们的顶级连接使我可以像这样扩展nodes
和edges
:
{
wpgraphql {
productCategories {
# What's the difference between these?
# 1) top-level nodes
nodes {
id
name
}
# 2) top-level edges
edges {
node {
id
name
}
}
}
}
}
这样返回的响应(省略ID):
{
"data": {
"wpgraphql": {
"productCategories": {
"nodes": [
{
"name": "Accessories"
},
{
"name": "Gift Cards"
},
{
"name": "Indoor"
}
],
"edges": [
{
"node": {
"name": "Accessories"
}
},
{
"node": {
"name": "Gift Cards"
}
},
{
"node": {
"name": "Indoor"
}
}
]
}
}
}
}
我的问题很简单:我使用哪个?为什么两者都有?
这是GraphiQL Explorer的屏幕截图,如果有帮助的话。
答案 0 :(得分:1)
实现Relay specification的GraphQL模式利用Connection类型来建模一对多或多对多关系。
每个连接都包括一个边列表和一个PageInfo
对象。每个边缘包括一个node
和该节点的cursor
。
边可能还包含其他字段-例如,如果我们在用户节点之间建立了朋友连接,则可能会包括创建友谊时的时间戳。但是,通常,边缘仅用于它们公开的cursor
字段。 cursor
值在通过连接进行分页并在每个边缘暴露时使用,表示您可以从结果中的任意点开始分页。游标不包含在节点中,因为它可能是特定于连接的,而不仅仅是节点本身(例如,某些游标编码排序标准)。
但是,如果作为客户端,您不需要分页连接结果,而只想获取所有节点,则您可能无需关心游标。在这些情况下,具有边不会增加任何值,只会增加查询的深度。因此,为方便客户,一些GraphQL服务选择了在边缘之外公开 just 个用于连接的节点。