请原谅这个天真的问题,但我已经全神贯注地寻找答案了,我发现的一切都是模糊的,或者对我毫无意义。以GraphQL规范为例:
query getZuckProfile($devicePicSize: Int) {
user(id: 4) {
id
name
profilePic(size: $devicePicSize)
}
}
命名此查询有什么意义?我已经看到了包含多个操作的GraphQL文档。命名查询是否会以某种方式影响返回的数据?我自己测试了这个,但是我没有一台可以轻松玩的服务器和数据集来进行实验。但是如果某个文档中的某些内容可以澄清这一点会很好 - 到目前为止所有示例都是超级简单的单个查询,或者是被命名但不能解释它们为什么的查询(除了&# 34;这里你可以做的很酷。")当我按照请求发送单个匿名查询时,我从命名查询中得到什么好处?
另外,关于突变,我在规范中看到了:
mutation setName {
setName(name: "Zuck") {
newName
}
}
在这种情况下,您需要指定setName
两次。为什么?我得到其中一个是变异的字段名称,需要将其与后端模式匹配,但为什么不:
mutation {
setName(name: "Zuck") {
...
我可以两次指定相同的名称有什么好处?我知道第一个可能是任意的,但为什么它不是噪音?我必须遗漏一些明显的东西,但到目前为止我找不到任何东西已经为我清除了。
答案 0 :(得分:12)
查询名称在服务器上没有任何意义。它仅用于客户端识别响应(因为您可以在单个请求中发送多个查询/突变)。
事实上,如果这是GraphQL请求中的唯一内容(并且没有任何参数),您只能发送一个匿名查询对象:
{
user(id: 4) {
id
name
profilePic(size: 200)
}
}
这仅适用于查询,而非突变。
使用query
(或mutation
)关键字后,您需要提供一个名称。理论上,即使没有名称,服务器也可以处理请求,但这不是当前GraphQL规范允许的。
修改强>
正如@orta在下面所述,服务器也可以使用该名称来标识持久查询。但是,这不是GraphQL规范的一部分,它只是一个自定义实现。
答案 1 :(得分:0)
我们使用命名查询,以便可以对其进行一致的监视,并可以对查询进行持久存储。那里for query variables可以填补空白。
例如:
{{1}}运行它
优点是每次查询相同,而不是不同的字符串,因为 query变量是不同的位。这意味着您可以在这些查询之上构建工具,因为您可以将它们视为不可变的。