簡體   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