Как повлиять на родительский результат в GraphQL? - PullRequest
0 голосов
/ 26 июня 2018

Следующий запрос 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 голосов
/ 27 июня 2018

Я считаю, что данные, разрешенные City(cityName:...), не должны влиять на firstName. Наличие одного поля, влияющего на весь ответ, может быть плохой структурой для API.

Но чтобы добиться чего-то подобного, я бы рекомендовал отправить параметр cityName на search, например:

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

И разрешите этот ввод данных в распознавателе search.

...