如何影响GraphQL中的父结果?

时间:2018-06-26 14:49:14

标签: graphql graphql-js

以下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"
        }
      }
    ]
  }
}

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

1 个答案:

答案 0 :(得分:0)

我认为City(cityName:...)解析的数据不会影响firstName。对于API而言,只有一个字段影响整个响应可能是一个不好的结构。

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

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

然后解析在search解析器上输入的数据。