【问题标题】:What is the point of naming queries and mutations in GraphQL?在 GraphQL 中命名查询和突变有什么意义?
【发布时间】:2016-03-04 21:03:44
【问题描述】:

请原谅这个幼稚的问题,但我已经到处寻找答案,但我发现的一切要么含糊不清,要么对我来说毫无意义。以 GraphQL 规范中的这个例子为例:

query getZuckProfile($devicePicSize: Int) {
  user(id: 4) {
    id
    name
    profilePic(size: $devicePicSize)
  }
}

将此查询命名为getZuckProfile 有什么意义?我见过一些关于包含多个操作的 GraphQL 文档。命名查询是否会以某种方式影响返回的数据?我自己会对此进行测试,但我没有可以轻松进行实验的服务器和数据集。但是,如果某些文档中的某些内容可以澄清这一点,那就太好了——到目前为止,所有示例都是超级简单的单个查询,或者是已命名但不能解释为什么会这样的查询(除了“这是一个很酷的你能做的事。”)命名查询有什么好处,而我在每个请求都发送一个匿名查询时没有这些好处?

另外,关于突变,我在规范中看到:

mutation setName {
  setName(name: "Zuck") {
    newName
  }
}

在这种情况下,您指定了两次setName。为什么?我知道其中之一是突变的字段名称,需要将其与后端架构匹配,但为什么不呢:

mutation {
  setName(name: "Zuck") {
...

两次指定同一个名称有什么好处?我知道第一个可能是任意的,但为什么不是噪音?我必须遗漏一些明显的东西,但到目前为止我发现的任何东西都没有为我清除它。

【问题讨论】:

    标签: graphql


    【解决方案1】:

    查询名称在服务器上没有任何意义。它仅用于客户端识别响应(因为您可以在单个请求中发送多个查询/突变)。

    事实上,如果这是 GraphQL 请求中唯一的东西(并且没有任何参数),您可以只发送一个匿名查询对象:

    {
      user(id: 4) {
        id
        name
        profilePic(size: 200)
      }
    }
    

    这仅适用于查询,不适用于突变。

    编辑:
    正如@orta 下面所指出的,服务器也可以使用该名称来识别持久查询。但是,这不是 GraphQL 规范的一部分,它只是顶部的自定义实现。

    【讨论】:

    • 这句话有没有参考:Once you use the query keyword you need to provide a name?我遇到了这个问题,我没有找到关于它的官方文档
    • 官方规范在spec.graphql.org。不要相信我的话(如果您正在实现服务器或库并需要参考,请阅读完整规范)但我认为实际上可以使用关键字指定 query 但没有名称。我认为mutation 字段仍然需要一个名称。
    • 未命名的版本:query { myName }mutation { setName(name: "Zuck") { newName } } 根据规范有效:spec.graphql.org/draft/#sec-Root-Operation-Types。编辑了答案中的错误信息。
    【解决方案2】:

    我们使用命名查询,以便可以对它们进行一致的监控,并且我们可以对查询进行持久存储。复制在那里for query variables 填补空白。

    举个例子:

    query getArtwork($id: String!) {
      artwork(id: $id) {
        title
      }
    }
    

    您可以针对 Artsy GraphQL API here 运行它

    优点是每次都是同一个查询,而不是不同的字符串,因为查询变量是不同的位。这意味着您可以在这些查询之上构建工具,因为您可以将它们视为不可变的。

    【讨论】:

      猜你喜欢
      • 2019-08-11
      • 2018-09-17
      • 2021-09-09
      • 2017-08-24
      • 2021-06-29
      • 2020-11-04
      • 2020-11-09
      • 2016-01-14
      • 2022-01-13
      相关资源
      最近更新 更多