在 GraphQL 中
在查询大型数据集时,限制页面大小可防止压倒性的客户端或服务器。 在 GraphQL 中,数据 API 生成器(DAB)使用 first 参数来控制单个响应中返回的记录数。 DAB 在内部应用基于游标的分页,但 first 可以单独用于仅限制结果大小。
注释
first 限制返回的记录数,但不自行处理延续。 对于多个页面,请使用 after。
转到 本文档的 REST 版本。
概述
| 概念 | Description |
|---|---|
| 默认页面大小 |
runtime.pagination.default-page-size (默认值为 100) |
| 最大页面大小 |
runtime.pagination.max-page-size (默认值为 100000) |
| 客户端替代 | first |
| 请求最大值 | 传递 -1 以请求配置的最大页面大小 |
如果 first 省略,则会自动应用默认页面大小。
使用模式
query {
books(first: N) {
items { id title }
}
}
Example
将结果限制为五本书。
query {
books(first: 5) {
items {
id
title
}
}
}
概念 SQL
SELECT TOP (5)
id,
sku_title AS title
FROM dbo.books
ORDER BY id ASC;
示例响应
{
"data": {
"books": {
"items": [
{ "id": 1, "title": "Dune" },
{ "id": 2, "title": "Foundation" },
{ "id": 3, "title": "Hyperion" },
{ "id": 4, "title": "I, Robot" },
{ "id": 5, "title": "The Martian" }
]
}
}
}
验证规则
| Input | 结果 |
|---|---|
| 省略 | 使用 default-page-size |
| 正整数≤最大值 | 已接受 |
-1 |
展开到 max-page-size |
0 |
错误(无效) |
< -1 |
错误 |
> max-page-size |
错误 |
示例错误消息
Invalid number of items requested, first argument must be either -1 or a positive number within the max page size limit of 100000. Actual value: 0
示例配置
{
"runtime": {
"pagination": {
"default-page-size": 100,
"max-page-size": 100000
}
},
"entities": {
"Book": {
"source": {
"type": "table",
"object": "dbo.books"
},
"mappings": {
"sku_title": "title",
"sku_price": "price"
},
"relationships": {
"book_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
}
},
"Category": {
"source": {
"type": "table",
"object": "dbo.categories"
},
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
另请参阅
| 概念 | REST | GraphQL | 目的 |
|---|---|---|---|
| 投影 | $select | 物品 | 选择要返回的字段 |
| Filtering | $filter | 滤波器 | 按条件限制行 |
| 排序 | $orderby | orderBy | 定义排序顺序 |
| 页面大小 | $first | first | 限制每页的项数 |
| 延续 | $after | 后 | 使用光标从最后一页继续 |
注释
REST 关键字以 $遵循 OData 约定开头。