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
,但我只想获得
作者
,我如何才能获得它?您能看一下吗?