Apollo / GraphQL один и тот же запрос с разными параметрами - PullRequest
0 голосов
/ 28 декабря 2018

Как бы я поступил с запросом Apollo с другими параметрами.Допустим, мое приложение имеет концепцию пользователей, и я хочу, чтобы мой API мог найти пользователя по идентификатору или имени пользователя.

Не похоже, что я могу это сделать

type Query {
  user(id: ID!): User
  user(username: String!): User
}

я должен прибегнуть к чему-то вроде этого

type Query {
  userById(id: ID!): User
  userByUsername(username: String!): User
}

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Создайте новый тип ввода с идентификатором и именем пользователя в качестве полей и укажите его в качестве параметра.

type Query {
  getUser(filters:UserFilter): User
}

input UserFilter{
    ID : Int,
    Username : String
}

Запрос должен выглядеть следующим образом ...

Query{
 getUser(filters:{ID:123123})
}

ИЛИ для фильтра имени пользователя

Query{
 getUser(filters:{Username:"Tom"})
}
0 голосов
/ 28 декабря 2018

Я полагаю, что ваш второй вариант - лучший, но вы могли бы сделать что-то вроде этого.

type Query {
  user(id: ID, username: String): User
}

Если параметры не требуются, ваш распознаватель может использовать некоторую логику, чтобы определить, должен ли он основываться на пользователях.на идентификатор или имя пользователя.

if (args.id) {
  return getUserById(args.id)
} else {
  return getUserByUsername(args.username)
}

Однако по причинам, которые были упомянуты в этом выступлении https://youtu.be/pJamhW2xPYw?t=750 (может быть, примерно в 12:30), я считаю, что ваш второй вариант - лучший выбор дизайна.Надеюсь, это поможет!

...