Docs 菜单
Docs 主页
/ /
Atlas App Services
/

Atlas GraphQL API [已弃用]

在此页面上

  • Overview
  • 为什么选择 GraphQL?
  • App Services 如何创建 GraphQL 模式
  • GraphQL 操作
  • 查询
  • 修改
  • 限制

Atlas GraphQL API允许客户端应用程序使用任何标准GraphQL客户端访问权限存储在链接的MongoDB Atlas 群集中的数据。

Atlas App Services 会自动为每个具有已定义架构的关联集合创建 GraphQL 类型,并评估所有 GraphQL 请求的基于角色的权限。要了解如何通过 GraphQL API 提供数据,请参阅在集合中公开数据。

要了解可用于 Atlas GraphQL API 的生成类型和操作,请参阅 GraphQL 类型和解析程序

要使用自定义查询和突变扩展生成的 GraphQL API 的功能,请参阅定义自定义解析程序。

注意

免费创建 Atlas 集群

通过 GraphQL API,您可以访问存储在 MongoDB Atlas 集群或联合数据库实例中的数据。要开始使用,请创建免费集群并将其链接到您的应用。

如果您还没有任何数据,但仍想探索 GraphQL API,请考虑在集群中添加一个示例数据集

GraphQL 是一种用于客户端应用程序的声明式强类型查询语言。客户端在单个请求中定义所需的确切数据形状和内容,从而消除了过度获取问题,并避免了多次往返服务器的麻烦。

如要了解有关 GraphQL 的更多信息,请参阅官方 GraphQL 教程

使用 App Services,可以从 MongoDB 集合的 JSON 架构生成 GraphQL 架构和解析程序。这不同于传统的代码优先和架构优先的 GraphQL 架构开发方法。

要使用 App Services 定义 GraphQL 模式:

  1. 为 MongoDB Atlas 集群中的 MongoDB 集合定义 JSON 模式。您可以根据自定义的定义强制执行集合模式的结构,也可以使用基于集合中文档生成的模式。

  2. 根据您的集合 JSON 模式生成 GraphQL 模式和解析程序

  3. 可以选择使用自定义解析程序扩展生成的 GraphQL 架构的功能。

App Services 会为您向 GraphQL API 公开的数据自动生成类型和解析程序。生成的类型和操作都以每个公开集合的基本类型名称命名。如果没有定义类型名称,App Services 会使用集合名称。

有关如何公开集合并命名其数据类型的详情,请参阅公开集合中的数据。

注意

GraphQL 突变和自定义解析程序请求使用 MongoDB 事务来确保多个数据库操作的正确性。如果请求中的任何操作失败,则整个事务将失败,并且不会向数据库提交任何操作。

GraphQL 查询是一种读取操作,从一种或多种类型请求特定字段。App Services 会自动为每个具有已定义架构的集合中的文档生成查询类型。

有关详细信息和示例,包括所有自动生成的查询类型的列表,请参阅查询解析程序。

# Find a single movie by name
query {
movie(query: { title: "The Matrix" }) {
_id
title
year
runtime
}
}
# Find all movies from the year 2000
query {
movies(query: { year: 2000 }) {
_id
title
year
runtime
}
}
# Find the ten longest movies from the year 2000
query {
movies(
query: { year: 2000 }
sortBy: RUNTIME_DESC
limit: 10
) {
_id
title
year
runtime
}
}

GraphQL 变更是创建、修改或删除一个或多个文档的写操作。App Services 会自动为每个集合中具有已定义模式的文档生成变更类型。App Services 使用事务来确保通过变更进行安全写入。

有关详细信息和示例,包括所有自动生成的突变类型的列表,请参阅突变解析程序。

# Insert a new movie
mutation {
insertOneMovie(data: {
title: "Little Women"
director: "Greta Gerwig"
year: 2019
runtime: 135
}) {
_id
title
}
}
# Update the year of a movie
mutation {
updateOneMovie(
query: { title: "The Matrix" }
set: { year: 1999 }
) {
_id
title
}
}
# Delete a movie
mutation {
deleteOneMovie(query: { title: "The Room" }) {
_id
title
}
}
# Delete multiple movies
mutation {
deleteManyMovies(query: { director: "Tommy Wiseau" }) {
_id
title
}
}
  • 对于给定的查询或变更,GraphQL API 最多可以处理十个解析程序。如果操作指定十个以上的解析程序,则整个操作将失败,并显示错误消息 "max number of queries reached"

  • 对于给定的查询或更改,GraphQL API 的最大关系解析深度为 5。 如果操作指定的关系深度超过五个解析程序,则整个操作将失败并显示错误消息"max relationship depth exceeded"

  • GraphQL API 希望集合架构具有唯一的标题,并在数据模型包含重复标题时发出警告。

    如果出现以下情况,请放心并忽略此警告:

    • 标题冲突仅涉及嵌入式对象。

    • 每个具有给定标题的架构都使用相同的定义,包括关系。

  • GraphQL API 目前不支持针对嵌入式对象数组内部字段的关系。可以使用自定义解析程序手动查找并解析嵌入式对象数组关系。

后退

升级共享层集群