【发布时间】:2019-08-11 14:48:56
【问题描述】:
我正在学习 GraphQL,有一个基本点让我感到困惑。我知道有一个简单的解释,但我找不到。具体来说,来自 Apollo 文档 (https://www.apollographql.com/docs/apollo-server/essentials/data.html#operation):
...为操作命名以便快速识别是有意义的 调试期间的操作或聚合类似操作 一起...操作可以通过在后面放置一个标识符来命名 查询或突变关键字,就像我们在此处使用 HomeBookListing 所做的那样:
query HomeBookListing {
getBooks {
title
}
}
如果HomeBookListing 是查询的名称,那么getBooks 是什么?解析器的名称?
同样,当你将变量传递给查询时,为什么会有“两级”参数,像这样
mutation HomeQuickAddBook($title: String, $author: String = "Anonymous") {
addBook(title: $title, author: $author) {
title
}
}
那么,$title: String, $author: String = "Anonymous" 是传递给查询的变量,title: $title, author: $author 是传递给解析器的变量吗?
我当然可以记住模式,但我很想从概念上理解不同的部分在这里做什么。任何见解都非常感谢!
【问题讨论】:
-
我已经有一段时间没有接触graphql了,但如果我没记错的话:“什么是getBooks” - 解析器的名称,是的。它不是“查询的第二个名称”。你可以在它旁边有
getProducts。它只是查询中的一个“字段”。 -
变异也一样:你为整个操作声明参数列表,那么操作的不同部分(addBook / addReview)将使用参数列表的不同子集。
-
@SergioTulentsev -- 谢谢。我认为这更多的是解析器本身中的单独“字段”,在服务器上,例如,您可以拥有
const resolvers= { Query: { getBooks: async() => {....}, getProducts: async() => {...} } }。我想这就是你所指的? -
是的,确实如此。
标签: graphql apollo apollo-server