graphql 的 select 出现在哪一边?

Which side does the select take place for graphql?

假设我有这种类型:

type User {
  name: string!
}

但是解析器打包回那个对象:

{
  "name": "john",
  "topSecretPassword": "123456"
}

graphql 客户端不知道如何 select 字段 topSecretPassword 因为它不在架构中。该字段是否发送到客户端并被丢弃?服务器端是否忽略该字段?

GraphQL 服务仅 returns 请求的字段。如果未请求该字段,则它不会出现在响应中。如果架构中不存在该字段,则无法请求它。

无论解析器返回什么,都是如此。解析器中返回的值总是强制为适当的类型。对于对象类型,其各个字段根据其自己的解析器进行解析。

有关执行工作原理的详细说明,请参阅 spec