Вы можете начать с написания перечисления GraphQL возможных категорий.
enum Category { ONEPIECE NARUTO }
Поскольку оба типа комиксов имеют одинаковую структуру, вы можете иметь один тип GraphQL для их представления.Мы включим только что написанную категорию, чтобы вы могли определить, какая из них.
type ComicBook implements Node {
id: ID!
category: Category!
title: String!
price: String!
desc: String!
}
Существует несколько стандартное соглашение для извлечения произвольных объектов GraphQL по их идентификатору ;хотя он исходит из клиента Facebook Relay Javascript, он специально не привязан к этому клиенту, и я бы использовал его здесь.
interface Node {
id: ID!
}
type Query {
node(id: ID!): Node
}
Это заменит ваши запросы верхнего уровня для получения определенных видов книг по идентификатору;Вы можете написать запрос, например
{
node(id: "naruto1") {
... on ComicBook { category title price desc }
}
}
Теперь, когда у вас есть перечисление категории, вы также можете написать один запрос верхнего уровня, чтобы вернуть комиксы, возможно отфильтрованные по категории
type Query {
comicBooks(category: Category): [ComicBook!]!
}
{
comicBooks(category: ONEPIECE) { id title price desc }
}
Есть некоторые соответствующие изменения кода, чтобы сделать эту работу;Я бы, вероятно, начал с объединения двух списков комиксов в один и добавления там аналогичного поля категории.
После того, как вы это сделаете, если вы добавите третью категорию, вам нужно добавить ее вперечислите и добавьте его в набор данных, но вам не нужно вносить какие-либо другие изменения в код, схему GraphQL или запросы.