【问题标题】:What does the "operation name" reference?“操作名称”指的是什么?
【发布时间】:2016-10-27 13:48:13
【问题描述】:

我正在学习 GraphQL,我对 operation name 之后的查询部分非常感兴趣 querymutation(取决于根查询类型)。我发现了几个使用操作名称的代码示例,我对它们的来源感到困惑?代码中似乎没有关于它们的引用,而且它们似乎完全是任意的。

query Welcome {
  echo (email: "hi@example.com")
}

query HeroNameQuery {
  hero {
    name
  }
}

我不明白为什么给定的架构不能只包含后面的查询和类型(例如userarticleorder 等),而且我不明白命名空间系统和操作名称提供了任何优势。

https://github.com/mugli/learning-graphql/blame/master/7.%20Deep%20Dive%20into%20GraphQL%20Type%20System.md#L436

http://graphql.org/docs/queries/

【问题讨论】:

  • 如果你只发送一个,我很确定这个名字可以省略(我也认为query)。我相信这些名称基本上用于存储查询。您可以将它们放在服务器上并按名称执行它们,而不是发送整个查询......我相信这就是想法,但我也是 GQL 菜鸟。

标签: graphql


【解决方案1】:

这是一个很好的问题。操作名称几乎取决于您要如何称呼它。但是,当您像这样传递查询/突变参数时确实需要它:

// GraphQL Query

query Welcome ($data: String!) {
  echo (email: $data) {
    name
  }
}

// GraphQL Variables

{
  "data": "hi@example.com"
}

至于返回字段,您必须写出给定类型选择的子字段,因为 GraphQL 的理念是所有内容都是强类型的,并且客户端准确指定子字段需要哪些数据.

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    查询/突变名称是可选的。如果您的后端支持,您可以在后端使用它来存储查询。但是,它通常用于日志记录。您可以为每个查询/突变使用唯一的名称。然后,当您遇到问题时,您可以在日志中查找查询名称,以查看该特定查询发生了什么。

    【讨论】:

    • 我也在文档中读到过 (graphql.org/learn/queries/#operation-name)。令人困惑的部分是,客户端可以选择将查询操作名称设置为他们想要的任何名称,所以我看不出这对于通过服务器端日志进行调试有什么用处!
    • @spinkus 是的,如果客户端只是生成了操作名称,它不一定能传达含义。但如果您可以访问客户端并找出他们发送的查询,它对于检查日志仍然很有用。
    【解决方案3】:

    在 GraphiQL 中,您可以从操作名称指定的查询列表中进行选择。这里有一些屏幕截图可以帮助理解这一点。

    当您同时有两个突变/查询并且它们没有操作名称时,您无法运行它们。

    当它们具有操作名称时,可以在单击播放/运行按钮时列出它们。

    这是迄今为止我见过的拥有操作名称的最大案例。

    但这不是必需的,因为当您刚刚运行查询/突变时,就会运行。

    【讨论】:

      【解决方案4】:

      当你有一个更大的项目要处理时,有必要添加突变的名称,因为未命名的 graphQL 查询可能会阻碍来自 NewRelic 等(应用程序性能监控 - APM)的重要监控日志。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-23
        • 1970-01-01
        • 2019-01-06
        • 2019-05-29
        • 1970-01-01
        • 2018-05-12
        相关资源
        最近更新 更多