繁体   English   中英

GraphQL中“ schema” typedef的用途是什么?

[英]What is the use of `schema` typedef in GraphQL?

我使用Apollo + Express开始使用GraphQL,我看到该示例在typedef的底部添加了一个schema名称:

let typeDefs = [`
type Query {
  hello: String
}

schema {
  query: Query
}`];

并且在定义了解析器之后,它使用makeExecutableSchema生成模式:

let schema = makeExecutableSchema({typeDefs, resolvers});

但是,如果删除了typedef的schema部分,我仍然可以正常使用端点,例如:

http://localhost:3000/graphql/?query={hello}

收益:

{"data":{"hello":"world"}}

但是,如果我将查询部分更改为其他内容,则服务器将失败:

let typeDefs = [`
type Query {
  hello: String
}

schema {
  testquery: Query
}`];

GraphQLError:语法错误:意外的名称“ testquery”

我已经阅读了Apollo的教程页面以及Node.js + GraphQLHow to GraphQL教程,但是找不到对该schema部分的引用。

这有什么用途?

关于架构

模式最多可以具有三种根操作类型,但仅需要一种。 查询类型必须存在于每个模式中,并且必须是对象类型( Spec )。 对GraphQL进行查询时,此类型是根类型。 此外,进行突变时会使用突变根类型。 最新添加的是订阅类型。

关于根类型

根类型是简单的对象类型。 它们可以具有字段,而这些字段是参数。 默认情况下,查询类型称为Query ,突变类型称为Mutation ,订阅根类型称为Subscription 如果遵循这些标准名称,则可以省略schema规范。

# Doesn't need further specification, Query is the default name
type Query {
  # ...
}

您仍然可以根据需要命名这些类型。 要定义哪种对象类型是输入图的根类型,您必须使用模式定义。

# Non standard query type name
type MyQuery {
  # ...
}

schema {
  # Needs to be defined in the schema declaration
  query: MyQuery
}

对于突变和订阅类型,可以完成相同的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM