【问题标题】:How to influence the parent result in GraphQL?如何影响 GraphQL 中的父结果?
【发布时间】:2018-06-27 17:18:09
【问题描述】:

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

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

【问题讨论】:

    标签: graphql graphql-js


    【解决方案1】:

    我认为City(cityName:...)解析的数据不应该影响firstName。让一个字段影响整个响应对于 API 来说可能是一种糟糕的结构。

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

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

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

    【讨论】:

    • 啊哈,谢谢。在这种情况下,将其作为过滤器引入会更好吗?
    • 是的,我认为这将是最好的方法。这样search 将控制整个结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2021-10-15
    • 1970-01-01
    • 2019-11-05
    相关资源
    最近更新 更多