使用数据 API 生成器 (DAB) 中的 GraphQL 终结点,可以精确查询和修改数据。 每个查询都准确声明所需的字段,并支持用于筛选、排序和分页结果的参数。
默认情况下,DAB 在以下位置托管其 GraphQL 终结点:
https://{base_url}/graphql
通过配置公开的实体会自动包含在 GraphQL 架构中。
例如,如果你有 books 实体和 authors 实体,则两者都显示为架构中的根字段。
注释
使用任何新式 GraphQL 客户端或 IDE(如 Apollo、Insomnia 或 VS Code GraphQL)浏览架构并自动补全字段。
数据 API 生成器支持的关键字
| 概念 | GraphQL | 目的 |
|---|---|---|
| 投影 | 物品 | 选择要返回的字段 |
| Filtering | 滤波器 | 按条件限制行 |
| 排序 | orderBy | 定义排序顺序 |
| 页面大小 | first | 限制每页的项目数 |
| 延续 | 后 | 从最后一页继续 |
基本结构
每个 GraphQL 查询都以表示实体的根字段开头。
{
books {
items {
id
title
price
}
}
}
结果是一个 JSON 对象,其形状与选择集相同:
{
"data": {
"books": {
"items": [
{ "id": 1, "title": "Dune", "price": 20 },
{ "id": 2, "title": "Foundation", "price": 18 }
]
}
}
}
注释
默认情况下,除非另有配置(runtime.pagination.default-page-size)否则,DAB 每个查询最多返回 100 个项目。
查询类型
每个实体支持两个标准根查询:
| Query | DESCRIPTION |
|---|---|
entity_by_pk |
按主键返回一条记录 |
entities |
返回与筛选器匹配的记录列表 |
返回一条记录的示例:
{
book_by_pk(id: 1010) {
title
year
}
}
返回多个示例:
{
books {
items {
id
title
}
}
}
筛选结果
filter使用参数限制返回的记录。
{
books(filter: { title: { contains: "Foundation" } }) {
items { id title }
}
}
此查询返回其标题包含“Foundation”的所有书籍。
筛选器可以将比较与逻辑运算符组合在一起:
{
authors(filter: {
or: [
{ first_name: { eq: "Isaac" } }
{ last_name: { eq: "Asimov" } }
]
}) {
items { first_name last_name }
}
}
请参阅筛选器参数参考以获取支持的运算符,例如eq、neq、lt、lte和isNull。
对结果进行排序
该 orderBy 参数定义记录的排序方式。
{
books(orderBy: { year: DESC, title: ASC }) {
items { id title year }
}
}
这会返回按 year 降序排序的书籍,然后返回按降序排列的 title书籍。
有关更多详细信息,请参阅 orderBy 参数参考 。
限制结果
该 first 参数限制单个请求中返回的记录数。
{
books(first: 5) {
items { id title }
}
}
这会返回前五本书,默认情况下按主键排序。
您还可以使用 first: -1 来请求配置的最大页面大小。
在 第一个参数参考中了解详细信息。
后续结果
若要提取下一页,请使用上一个查询的游标参数after。
{
books(first: 5, after: "eyJpZCI6NX0=") {
items { id title }
}
}
after 标记符号表示上一页结束的位置。
有关更多详细信息,请参阅 参数参考的后部分。
字段选择(投影)
在 GraphQL 中,选择在响应中确切显示哪些字段。
没有像 SELECT * 这样的通配符。 仅请求所需内容。
{
books {
items { id title price }
}
}
还可以使用别名重命名响应中的字段:
{
books {
items {
bookTitle: title
cost: price
}
}
}
有关详细信息,请参阅 字段投影参考 。