Logo

Возможность:

Input object 'oneOf'

Input object 'oneOf'

Input object oneOf — это особый тип input object, в котором ровно одно из входных полей должно быть передано в качестве входного значения, иначе сервер возвращает ошибку валидации. Это поведение вводит полиморфизм для входных данных в GraphQL, позволяя проектировать более чистые схемы.

Например, получение пользователя в нашем приложении может осуществляться по различным свойствам, таким как ID пользователя или email. Для этого нам обычно потребовалось бы создать отдельное поле для каждого свойства:

type Query {
  userByID(id: ID!): User
  userByEmail(email: String!): User
}

Благодаря input object oneOf мы можем вместо этого иметь единственное поле user, принимающее все свойства через input object oneOf UserByInput, зная, что только одно из свойств (ID или email) может и должно быть передано:

type Query {
  user(by: UserByInput!): User
}
 
input UserByInput @oneOf {
  id: ID
  email: String
}

В запросе мы передаём входное значение ровно для одного из свойств:

{
  tom: user(by: {
    id: 1
  }) {
    name
  }
 
  jerry: user(by: {
    email: "jerry@warnerbros.com"
  }) {
    name
  }
}

Подпишитесь на нашу рассылку

Будьте в курсе всех обновлений Gato GraphQL.