Graphql只允许一个根查询?
正如上面所说的 一个要求是必须只有一个根查询,并且 以模式为例Graphql只允许一个根查询?,graphql,Graphql,正如上面所说的 一个要求是必须只有一个根查询,并且 以模式为例 type Post { id: ID! title: String! text: String! category: String author: Author! } type Author { id: ID! name: String! thumbnail: String posts: [Post]! } # The Root Query for th
type Post {
id: ID!
title: String!
text: String!
category: String
author: Author!
}
type Author {
id: ID!
name: String!
thumbnail: String
posts: [Post]!
}
# The Root Query for the application
type Query {
recentPosts(count: Int, offset: Int): [Post]!
}
这是否意味着我不能像下面那样声明另一个根查询?除了根查询之外,还有其他查询类型吗
# Another query
type Query {
getPost(id: Int): [Post]!
}
# Another query
type Query {
getAuthor(id: Int): [Author]!
}
是的,在GraphQL中只有一个根查询。但是,您可以通过提供一个“存根”字段+解析器,在根查询上为您的查询“命名空间”,如下所示
type Booking {
_id: ID!
event: Event!
user: User!
createdAt: String!
updatedAt: String!
}
type Event {
_id: ID!
title: String!
description: String!
date: String!
}
type RootQuery {
events: [Event!]!
bookings: [Booking!]!
}
schema {
query: RootQuery
}
在GraphQL中,有三个操作:
查询
、变异
和订阅
。这些操作中的每一个都有一个与之关联的类型,尽管您只需要为查询
提供一个类型——其他两个是可选的。我们将这些类型称为
我们为如下模式指定根操作类型:
schema {
query: Query
mutation: Mutation
}
您可以将查询类型命名为任何名称(query
,RootQuery
,FooBar
,等等)。但是,如果将其命名为Query
,则可以省略上述步骤(GraphQL将简单地假定三种根操作类型将命名为Query
、Mutation
和Subscription
)
我们的查询类型必须是,因此我们使用type
关键字来定义它,并为它提供至少一个字段:
type Query {
getPost(id: Int): Post!
}
type Post {
id: ID!
title: String!
text: String!
}
有了这个模式,我们现在可以编写一个查询了。我们没有指定变异
或订阅
类型,因此我们只能执行一个操作--查询
:
query {
getPost(id: 5) {
id
title
}
}
如我们所见,我们将查询称为根操作类型,因为它表示模式其余部分的根或条目。发送到服务器的每个可执行文档都必须从该根开始,尽管类型因操作(查询、变异或订阅)而异
查询是一种对象类型,这意味着我们可以向其添加其他字段:
type Query {
getPost(id: Int): Post
getAuthor(id: Int): Author
}
type Post {
id: ID!
title: String!
text: String!
}
type Author {
id: ID!
name: String!
}
现在我们可以编写一个不同的查询:
query {
getAuthor(id: 7){
id
name
}
}
或者甚至请求两个字段:
query {
getPost(id: 3) {
id
title
}
getAuthor(id: 11){
id
name
}
}
您不会像问题中所示那样两次定义Query
——您只需像上面所示那样添加额外的字段
有关更多信息,请参阅和。它与Java的关系如何?链接断开了。请详细说明
但是,您可以通过提供“存根”字段+解析器,在根查询上“名称空间”您的查询,如下所示。
?另外,如果我只能声明一个根查询,比如说POST
,但我只想获得作者
,我如何才能获得它?您能看一下吗?