【问题标题】:Does a GraphQL Operation Name Ever Change Query Behavior?GraphQL 操作名称是否会改变查询行为?
【发布时间】:2019-09-19 14:14:36
【问题描述】:

我是 GraphQL 的超级新手。我仍在了解基本概念和语言。在问我的问题时,我可能会说一些严重错误的话——如果我这样做,我会很感激更正。

小问题:操作的名称对查询的行为有影响吗?

也就是说,我的理解是,给定一个看起来像这样的 GraphQL 查询

query SomeQueryName {
    flower {
        name
        petal_number
    }
} 

其中query是操作类型,SomeQueryName是操作名称。

在解析查询时是否使用过这些名称?或者它们是否严格地是客户端程序员在编写查询时可以包含的东西,以帮助他们组织自己的代码?或者其他一些我没有想到的事情。

【问题讨论】:

    标签: graphql


    【解决方案1】:

    查询名称对服务器没有任何意义。解析查询时不使用它,仅使用查询的内容。所以你的例子相当于这个:

    query {
        flower {
            name
            petal_number
        }
    } 
    

    该名称仅用于前端的 GraphQL 客户端或用于调试目的。

    【讨论】:

      【解决方案2】:

      操作的名称与解析操作中的字段无关。 然而,当单个 GraphQL 文档中存在多个操作定义时,它是相关的。 From the spec:

      要执行一个请求,如果文档定义了多个操作,则执行器必须有一个解析的文档和一个选定的操作名称才能运行,否则文档应该只包含一个操作。

      换句话说,您的请求可能包含这样的文档:

      query Query1 {
        someField
      }
      
      query Query2 {
        someOtherField
      }
      

      当存在多个命名操作时,客户端还必须指定operationName 参数(除了queryvariables)。通过这样做告诉 GraphQL 服务执行该特定操作并忽略所有其他操作。发送多个操作而不指定operationName——或包含多个未命名操作将导致请求失败。

      在上述之外,正如@jo_va 所提到的,提供操作名称的唯一其他目的是用于调试或供客户端使用。例如,apollo-link-watched-mutation 使用操作名称来解决 Apollo 客户端的常见缓存问题。

      【讨论】:

        猜你喜欢
        • 2022-12-01
        • 2019-07-18
        • 2021-11-23
        • 1970-01-01
        • 2019-11-24
        • 1970-01-01
        • 1970-01-01
        • 2021-10-14
        • 2019-08-11
        相关资源
        最近更新 更多