我是GraphQL的新手。我仍然对基本概念和语言有所了解。我可能会说出一个在问我的问题时完全错误的话-如果我这样做,我将不胜感激。
简短的问题:操作名称对查询的行为有影响吗?
根据我的理解,给定一个类似GraphQL的查询
query SomeQueryName {
flower {
name
petal_number
}
}
query
是操作类型,而SomeQueryName
是操作名称。
解析查询时是否曾经使用过这些名称?还是它们严格地是客户程序员在编写查询时可以包括的东西,以帮助他们组织自己的代码?或其他我没有想到的事情。
答案 0 :(得分:2)
查询名称对服务器没有任何意义。解决查询时不使用它,仅使用查询的内容。因此,您的示例与此等效:
query {
flower {
name
petal_number
}
}
该名称仅由GraphQL客户端在前端使用或用于调试目的。
答案 1 :(得分:2)
该操作的名称与解析该操作内部的字段无关。 但是,当一个GraphQL文档中存在多个操作定义时,这是相关的。 From the spec:
要执行请求,如果文档定义了多个操作,则执行者必须具有已解析的文档和选定的操作名称才能运行,否则该文档应仅包含单个操作。
换句话说,您的请求可以包括这样的文档:
query Query1 {
someField
}
query Query2 {
someOtherField
}
存在多个命名操作时,客户端还必须指定一个operationName
参数(除了query
和variables
之外)。这样可以告诉GraphQL服务执行该特定操作,并忽略所有其他操作。发送多个操作而未指定operationName
-或包含多个未命名的操作将导致请求失败。
在上述之外,如@jo_va所述,提供操作名称的唯一其他目的是用于调试或供客户端使用。例如,apollo-link-watched-mutation
使用操作名称来解决Apollo客户端常见的缓存问题。