Как аргументы добавляются в GraphQL, их нужно определить раньше? - PullRequest
0 голосов
/ 27 февраля 2020

Привет всем. Я просто пытаюсь выучить graphql, используя Гэтсби. Я хочу знать, принимает ли каждое поле в graphql аргумент или его нужно как-то определить раньше. Так, например, если вы перейдете по этой ссылке результаты поиска graphql

https://graphql.org/swapi-graphql?query=%7B%0A%09allPeople%20%7B%0A%09%20%20people%20%7B%0A%09%20%20%20%20id%0A%20%20%20%20%20%20name%0A%20%20%20%20%20%20birthYear%0A%20%20%20%20%20%20eyeColor%0A%09%20%20%7D%0A%09%7D%0A%7D%0A

Если бы я хотел ограничить людей по цвету глаз, как бы я сделай это. В документах это выглядит просто, как если бы вы просто делали что-то вроде people(eyecolor: 'brown'), но это не представляется возможным. Я что-то пропустил? Я в основном хочу выполнить поиск в стиле SQL для всех людей, у которых цвет глаз коричневый.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Аргументы должны быть определены в схеме и реализованы в преобразователе. Если вы используете сторонний API (например, предоставленную вами ссылку), вы ограничены их схемой. По их схеме (нажав Docs в правой части страницы) вы можете определить, какие поля принимают аргументы. Например, person принимает id и personID аргументы:

person(id: ID, personID: ID): Person

people не принимает никаких аргументов, как видно из схема:

people: [Person]

Если вы строите свою собственную схему, вы можете добавить аргументы в любое поле и при реализации преобразователя для этого поля Вы можете использовать аргументы для logi c в этом преобразователе.

Если вы работаете со схемой, которую вы не контролируете, вам нужно будет добавить фильтрацию во внешний интерфейс:

const {people} = data.allPeople;
const brownEyedPeople = people.filter(({eyeColor}) => eyeColor === 'brown');
0 голосов
/ 27 февраля 2020

Когда вы начинаете разработку в Gatsby и фактически извлекаете свои данные в Gatsby, в параметрах запроса автоматически появляется опция filter .

https://www.gatsbyjs.org/docs/graphql-reference/#filter

Вы можете рассчитывать на фильтрацию ваших людей по eyeColor , используя следующий запрос:

{
  allPeople(filter: { eyeColor: { eq: "brown" } }) {
    edges {
      node {
        id
        name
        birthYear
        eyeColor
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...