Schema 和类型

在本页,你将学到关于 GraphQL 类型系统中所有你需要了解的知识,以及类型系统如何描述可以查询的数据。因为 GraphQL 可以运行在任何后端框架或者编程语言之上,我们将摒除实现上的细节而仅仅专注于其概念。

查询和变更类型(The Query and Mutation Types)

你的 schema 中大部分的类型都是普通对象类型,但是一个 schema 内有两个特殊类型:

  1. schema {
  2. query: Query
  3. mutation: Mutation
  4. }

每一个 GraphQL 服务都有一个 query 类型,可能有一个 mutation 类型。这两个类型和常规对象类型无差,但是它们之所以特殊,是因为它们定义了每一个 GraphQL 查询的入口。因此如果你看到一个像这样的查询:

  1. # { "graphiql": true }
  2. query {
  3. hero {
  4. name
  5. }
  6. droid(id: "2000") {
  7. name
  8. }
  9. }

那表示这个 GraphQL 服务需要一个 Query 类型,且其上有 herodroid 字段:

  1. type Query {
  2. hero(episode: Episode): Character
  3. droid(id: ID!): Droid
  4. }

变更也是类似的工作方式 —— 你在 Mutation 类型上定义一些字段,然后这些字段将作为 mutation 根字段使用,接着你就能在你的查询中调用。

有必要记住的是,除了作为 schema 的入口,QueryMutation 类型与其它 GraphQL 对象类型别无二致,它们的字段也是一样的工作方式。