Схема graphQL для типов, допускающих настраиваемые атрибуты

Я только недавно начал изучать graphQL, и мне это очень интересно, но мне интересно, как это может работать, если схема может изменяться в зависимости от действий пользователя. Типы в нашем приложении могут иметь определенные пользователем атрибуты, и я читал, что динамические схемы могут быть сложными в graphQL. Есть ли решение для этого типа схемы в graphQl / Apollo.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
0
0
542
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

GraphQL хорошо работает для API, в которых «форма» данных довольно четко определена. Например, в GitHub GraphQL API в репозиториях есть ссылки (теги или ветки), есть объекты GitObjects (коммиты или теги), которые все имеют довольно фиксированный набор атрибутов. Вы бы не создавали отдельное поле GraphQL для каждой ветви; вместо этого вы можете искать

query WhereIsMaster($name: String!, $owner: String!) {
  repository(name: $name, owner: $owner) {
    refs(refPrefix: "refs/heads/master") {
      nodes {
        target {
          oid
        }
      }
    }
  }
}

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

type KeyValuePair implements Node {
  id: ID!
  key: String!
  value: String!
}
type Query {
  lookup(key: String!): KeyValuePair
}
type Mutation {
  insert(key: String!, value: String!): KeyValuePair!
}

Если ваша модель данных действительно произвольная (в качестве яркого примера, MongoDB позволяет хранить произвольные документы JSON), то GraphQL не подходит для нее.

Другие вопросы по теме