[英]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 + GraphQL的How 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.