在 GraphQL 中,是否保证只返回查询指定的字段?

In GraphQL, is it guaranteed that only specified fields by the query are returned?

是否有这种要求,

query Example {
  fruits {
    id
    fruit_name
  }
}

总是需要 return 没有任何额外字段的结果?

{
  "data": {
    "fruits": [
      {
        "id": "1",
        "fruit_name": "Manzana"
      },
      {
        "id": "2",
        "fruit_name": "Pera"
      }
    ]
  }
}

或者是否允许有这样的额外字段?

{
  "data": {
    "fruits": [
      {
        "id": "1",
        "fruit_name": "Manzana",
        "some_extra_field": "red"
      },
      {
        "id": "2",
        "fruit_name": "Pera",
        "some_extra_field": "yellow"
      }
    ]
  }
}

我想知道 GraphQL 解析器是否必须对额外字段进行 tree shake。

is it guaranteed that only specified fields by the query are returned?

是的。

is it allowed to have extra fields?

没有。未请求的字段将不会被返回。

I wonder whether GraphQL resolvers have to tree shake extra fields.

没有。这不是您的解析器的工作。 GraphQL 实现负责过滤掉对象类型上的 un-requested 字段(参见 spec)。