GraphQL SDL 中的“schema”关键字用法

Yai*_*vet 2 syntax graphql

我试图理解schemaGraphQL 架构定义 (SDL) 上关键字的含义和用法。

我们以以下模式定义为例:

# Enumeration type for a level of priority
enum Priority {
  LOW
  MEDIUM
  HIGH
}

# Our main todo type
type Todo {
  id: ID!
  name: String!
  description: String
  priority: Priority!
}

type Query {
  # Get one todo item
  todo(id: ID!): Todo
  # Get all todo items
  allTodos: [Todo!]!
}

type Mutation {
  addTodo(name: String!, priority: Priority = LOW): Todo!
  removeTodo(id: ID!): Todo!
}

schema {
  query: Query
  mutation: Mutation
}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释一下schema上面定义中关键字/块的含义吗?为什么我们仍然需要它?

schema {
  query: Query
  mutation: Mutation
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*den 5

GraphQL 中有三种类型的操作

\n\n
\n
    \n
  • 查询\xe2\x80\x93 读取\xe2\x80\x90only 获取。
  • \n
  • 突变 \xe2\x80\x93 写入后读取。
  • \n
  • 订阅 \xe2\x80\x93 一个长\xe2\x80\x90lived 请求,用于获取数据以响应源事件。
  • \n
\n
\n\n

为了使您的架构支持特定操作,它必须将特定对象类型与其关联。每种类型都充当架构其余部分的入口点。这就是此 SDL 的作用——它显示与模式中每个操作关联的根操作类型。仅查询类型是必需的——其他两个是可选的,可以从定义中省略。每个根操作类型必须是对象类型——它不能是标量、枚举等。

\n\n

请注意,按照惯例,这三种类型被命名为Query,MutationSubscription-- 但它们可以被命名为任何名称。例如,您可以有这样的架构:

\n\n
schema {\n  query: Dog\n}\n\ntype Dog {\n  breeds: [Breed!]!\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

在大多数情况下,类型的名称是无关紧要的。但是,如果遵循标准约定(QueryMutationSubscription),则可以完全省略模式定义。GraphQL 只会假设该Query类型是查询根类型等等。

\n