如何影响 GraphQL 中的父结果?

How to influence the parent result in GraphQL?

以下 GraphQL 请求:

{
  search {
    firstName
    City{
      cityName
    }
  }
}

结果:

{
  "data": {
    "search": [
      {
        "firstName": "Alice",
        "City": {
          "cityName": "Berlin"
        }
      },
      {
        "firstName": "Bob",
        "City": {
          "cityName": "Madrid"
        }
      }
    ]
  }
}

添加 firstName 参数会产生以下结果;

要求:

{
  search(firstName:"Bob") {
    firstName
    City{
      cityName
    }
  }
}

在:

{
  "data": {
    "search": [
      {
        "firstName": "Bob",
        "City": {
          "cityName": "Madrid"
        }
      }
    ]
  }
}

到目前为止一切顺利,但是,如果我现在向 City 添加一个参数,我想让它反映在完整的结果上。

以下请求:

{
  search(firstName: "Bob") {
    firstName
    City(cityName: "Madrid") {
      cityName
    }
  }
}

结果:

{
  "data": {
    "search": [
      {
        "firstName": "Bob",
        "City": {
          "cityName": null
        }
      }
    ]
  }
}

但我希望结果是:

{
  "data": {
    "search": []
  }
}

或此回复:

{
  search {
    firstName
    City(cityName: "Madrid") {
      cityName
    }
  }
}

应该导致

{
  "data": {
    "search": [
      {
        "firstName": "Bob",
        "City": {
          "cityName": "Madrid"
        }
      }
    ]
  }
}

我认为这与查询的结构方式有关,但我不确定。

我认为City(cityName:...)解决的数据应该不会影响firstName。对于 API.

来说,让一个字段影响整个响应可能是一个糟糕的结构

但为了实现类似的目标,我建议在 search 上发送 cityName 参数,例如:

{
  search(firstName: "Bob", cityName: "Madrid") {
    firstName
    City {
      cityName
    }
  }
}

并在 search 解析器上解析该数据输入。