如何调用 GraphQL 终结点

使用数据 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 }
  }
}

请参阅筛选器参数参考以获取支持的运算符,例如eqneqltlteisNull

对结果进行排序

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
    }
  }
}

有关详细信息,请参阅 字段投影参考