У меня есть список JSON, который фиксирует отношения от одного до многих.
Например, школа может иметь несколько объектов класса, а класс может иметь несколько объектов ученика, но ученик принадлежит только к одному классу и одной школе:
{
"School": [ {
"id": 1,
"name": "Grad School",
"Class": [ {
"name": 101,
"Student": [ {
"name": 501,
"propertyA": "test"
}]
}]
}]
}
Я пытаюсь преобразовать этот пример JSON в подходящую схему, но вложение вызывает проблемы. Кажется, что Аполлон может помочь, но приведенный ниже пример не очень информативен: https://launchpad.graphql.com/4nqqqmr19
Я ищу предложения о том, как справиться с этой ситуацией, будь то преобразователь схемы JSON (который обрабатывает вложенные ситуации) или что-то еще.
Надеюсь, мой ответ указал вам направление.

Я думаю, что ваша проблема на самом деле не в схеме, которая мне кажется простой:
У вас есть эти типы (весь фиктивный код, поскольку вы не указали, на каком языке / фреймворке вы хотите предоставить GraphQL-Api):
SchoolType
id ID
name String
classes [Class]
students [Students]
ClassType
id ID
name String
school School
students [Student]
StudentType
id ID
name String
class Class
school School
Тогда нам понадобится точка входа
classQueryType
name "school"
argument :id, ID
resolve do
schools.where(id: argument["id"])
Итак, у нас есть схема. Большая работа, вероятно, состоит в том, чтобы получить доступ к схеме JSON для разных типов таким образом, чтобы работали указанные выше типы.
Итак, допустим, мы каким-то образом читаем данные JSON с той структурой, которая у вас есть.
const DATA = JSON.parse("your-example.json")
Нам нужно преобразовать это в разные коллекции объектов, чтобы мы могли запрашивать их динамически:
schools = []
classes = []
people = []
def build_schools(data)
data.schools.for_each do |school|
schools.push(
name: school.name,
id: school.id,
classes: build_classes(school)
)
end
end
def build_classes(school)
ids = []
school.classes.for_each do |class|
ids.push(class.id)
classes.push(
id: class.id
name: class.name
school_id: school.id # you create your own references, to associate these objects
students: build_students(class)
)
end
return ids
end
...
Но тогда вам все равно нужно подключить это к вашей системе типов. Что означает написать свои резолверы:
Например, для StudentType
StudentType
id ID
name String
class Class
school School
resolve(object) ->
school_id = students.where(id: object.id).class_id.school_id
schools.where(id: school_id)
Ах, спасибо за подробности. У меня есть часть коллекции объектов уже в Neo4J, это была часть преобразователя, которую я не мог понять.
Мой рабочий процесс, который я планирую использовать, - это Neo4J -> GraphQL / Apollo -> React. Правильно ли я говорю, что предоставленный вами метод распознавателя можно использовать на панели запуска Apollo?
Правильно ли я понимаю, что у вас есть источник данных JSON, а у вас нет доступа к БД?