[英]Cursor Based Pagination Naming Convention in GraphQL
在GraphQL API中,我经常看到NQ、MQ等命名约定作为cursor中使用的参数。 这是一个示例,如下所示,
"data": {
"items": {
"totalCount": 351,
"pageInfo": {
"hasNextPage": true,
"hasPreviousPage": false,
"endCursor": "Mw",
"startCursor": "MQ"
},
"edges": [
{
"cursor": "MQ",
"node": {
"id": "UGxhY2UtMzUy",
"displayName": "Redbeard"
}
},
{
"cursor": "Mg",
"node": {
"id": "UGxhY2UtMzUx",
"displayName": "Frey of Riverrun"
}
},
{
"cursor": "Mw",
"node": {
"id": "QmlsbGVyLTI=",
"displayName": "Something Else"
}
}
]
}
}
}
资料来源: https://dev.to/tymate/first-dive-into-graphql-ruby-nak
其他示例包括此导轨示例: https://www.2n.pl/blog/graphql-pagination-in-rails
这些命名约定是什么?例如,您将如何分页?
中继服务器规范定义了应如何进行分页以与中继 GraphQL 客户端兼容。 虽然它不是完成分页的唯一方法,但它已经发展成为一种标准——至少在示例中,因为它可以很容易地引用。
关于连接的部分提供了有关游标如何工作的更多信息:
每条边都有一个 cursor 值。 这个值 - 他们称之为 - 一个不透明的值,这意味着它不应该被服务器解释。 它是一个只有服务器才能解释的引用/指针。 因此,如果您有一个获取一堆值的查询:
edges: [
{ cursor: "abc", node: {...} },
{ cursor: "def", node: {...} },
{ cursor: "ghi", node: {...} },
{ cursor: "jkl", node: {...} },
{ cursor: "mno", node: {...} }
]
您可以通过查看最后一个元素 mno 的mno
来请求下一页并将其传递到查询中。
query {
manyQuery(first: 5, after: "mno") {
edges {
cursor
node {...}
}
}
}
这将为您提供接下来的 5 个节点。 另请参阅graphql.org 上的此部分。
因此,回答您的问题:该字符串可能包含服务器可以用来引用您的节点之一的任何内容。 例如数据库中的 id。 为了消除从 API 用户传递任意值的诱惑,此字符串通常被编码为 base64 格式。 该值应该对客户端没有意义,并且仅用于传递回服务器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.