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