Полиморфная структура данных в GraphQL с MongoDB - PullRequest
0 голосов
/ 18 сентября 2018

Мне нужно создать структуру данных в GraphQL (MongoDB в качестве базы данных), которая представляет следующую схему:

  • A Билл может иметь несколько статей
  • Одна статья имеет номер группы статей и многочисленные атрибуты, которые на 100% зависят от номера группы статей и могут сильно различатьсямежду этими группами.

Так что одна статья может выглядеть так:

{
article-group-number: 100,
length: 5.5
}

Другая статья может выглядеть так:

{
article-group-number: 101,
width: 2
}

Может быть дажестатьи, которые имеют ссылку на другую статью (но не имеют круговой структуры).

Мне нужно иметь возможность создавать и поддерживать различные правила (функции) проверки для каждого номера статьи.Как мне это сделать?

Я думал о union типов в GraphQL, но их можно только читать, а не записывать ("мутацией") на данный моментво время.Должен ли я сохранить эти статьи в виде чистых JSON-данных и выполнить всю проверку вручную?Таким образом, я потерял бы логическую структуру, так как это поле данных JSON было бы просто неким «грязным блобом данных» в моих глазах, потому что вся логика теряется при прохождении через GraphQL.

Нет тамболее чистый способ?

1 Ответ

0 голосов
/ 18 сентября 2018

Два варианта:

Вы можете взять реплику из самого GraphQL - тип __Type, используемый в схемах, имеет поле «kind» и множество атрибутов, которые зависят от типа типа.,Например, тип объекта может иметь поля, а другие типы - нет.GraphQL просто помещает все возможные атрибуты в тип __Type и позволяет им принимать нулевые значения, когда они не применимы к типу типа.Вы можете сделать то же самое и просто позволить вашим статьям иметь все возможные атрибуты.

Или вы можете использовать объединение типов статей, возможно, все реализуют общий интерфейс статьи.Это не проблема для мутаций.Поскольку мутации находятся в совершенно другом пространстве имен, чем запросы, они могут делать все, что вам угодно - тип, который вы изменяете, не должен совпадать с типом, который вы запрашиваете, и на самом деле обычно это не так.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...