我试图理解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)
GraphQL 中有三种类型的操作:
\n\n\n\n\n\n
\n- 查询\xe2\x80\x93 读取\xe2\x80\x90only 获取。
\n- 突变 \xe2\x80\x93 写入后读取。
\n- 订阅 \xe2\x80\x93 一个长\xe2\x80\x90lived 请求,用于获取数据以响应源事件。
\n
为了使您的架构支持特定操作,它必须将特定对象类型与其关联。每种类型都充当架构其余部分的根或入口点。这就是此 SDL 的作用——它显示与模式中每个操作关联的根操作类型。仅查询类型是必需的——其他两个是可选的,可以从定义中省略。每个根操作类型必须是对象类型——它不能是标量、枚举等。
\n\n请注意,按照惯例,这三种类型被命名为Query,Mutation和Subscription-- 但它们可以被命名为任何名称。例如,您可以有这样的架构:
schema {\n query: Dog\n}\n\ntype Dog {\n breeds: [Breed!]!\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在大多数情况下,类型的名称是无关紧要的。但是,如果遵循标准约定(Query、Mutation和Subscription),则可以完全省略模式定义。GraphQL 只会假设该Query类型是查询根类型等等。