Совместное использование общих полей между Input и Type в GraphQL - PullRequest
0 голосов
/ 30 августа 2018

Мне было интересно, есть ли способ обмена общими полями между Input и Type в GraphQL, чтобы мне не приходилось определять один и тот же набор полей в нескольких местах.

Пример:

input PersonInput {
    id: String!
    name: String
    address: String
}

type Person {
    id: String!
    name: String
    address: String
}

Я знаю, что Фрагмент может быть решением, но если мое понимание правильное, использование Фрагмента всегда требует от вас включения условия, которое выглядит следующим образом:

Fragment PersonCommonFields on Person {
    ...
}

Кажется, нет способа указать "on Person / PersonInput".

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Взгляните на это: https://www.apollographql.com/docs/guides/schema-design.html

На мой взгляд, есть два варианта:

  1. Используйте interface для определения общих schema полей

  2. Использовать es6 синтаксис шаблона строки. Используйте это как ${common}

0 голосов
/ 30 августа 2018

GraphQL fragments для запросов, а не для определения схемы.

Когда я начал изучать GraphQL, меня это тоже раздражало, потому что я все еще думал RESTful. В большинстве случаев, имеющих свободу, чтобы установить определенные поля ненулевыми или удалить их полностью из типа ввода / вывода имеет неоценимое значение.

, например

input CreatePersonInput {
  name: String!
  slug: String
  address: String
}

type Person {
  id: ID! # Autogenerated on the server
  name: String!
  slug: String! # Will always exist, either user provided or computed
  # address: String # Omitted for security reasons
}

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

Вы также должны учитывать behavior / task-based мутации над resource или " анемичные мутации "

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

...