GraphQL操作名称是否会更改查询行为?

时间:2019-04-30 21:43:21

标签: graphql

我是GraphQL的新手。我仍然对基本概念和语言有所了解。我可能会说出一个在问我的问题时完全错误的话-如果我这样做,我将不胜感激。

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

根据我的理解,给定一个类似GraphQL的查询

query SomeQueryName {
    flower {
        name
        petal_number
    }
} 

query是操作类型,而SomeQueryName是操作名称。

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

2 个答案:

答案 0 :(得分:2)

查询名称对服务器没有任何意义。解决查询时不使用它,仅使用查询的内容。因此,您的示例与此等效:

query {
    flower {
        name
        petal_number
    }
} 

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

答案 1 :(得分:2)

该操作的名称与解析该操作内部的字段无关。 但是,当一个GraphQL文档中存在多个操作定义时,这是相关的。 From the spec

  

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

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

query Query1 {
  someField
}

query Query2 {
  someOtherField
}

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

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