GraphQL разрешает несколько схем динамически - PullRequest
0 голосов
/ 02 мая 2018

Я разрабатываю сервис graphql, используя зависимости [com.graphql-java: graphql-java: 8.0]. По сути, мне нужно получить некоторые условные данные, основанные на ответе родительской схемы. например, если ResultOne ответ contentTypeId == 1, для которого мне нужно получить и подготовить дополнительный ответ, используя схему типа Рыба, соответственно для contentTypeId == 2, мне нужно получить и подготовить ответ, используя схему типа Fruit.

extend type Query {
    search(
        name: String,
        category: String
    ): [ResultOne]
}

type ResultOne {
    contentTypeId: Int
    content: Content
}

type Fish {
    name: String    
    weight: Float
}

type Fruit {
    name: String
    Color: String
}

type Toy {
    name: String
    description: String
}

Я устал от объединения, но в этом случае возникла исключительная ситуация: «Для интерфейса / объединения не определен тип содержимого».

union Content = Fish | Fruit |Toy

Пожалуйста, не стесняйтесь задавать мне свой вопрос, Если моя проблема не ясна.

1 Ответ

0 голосов
/ 03 мая 2018

Это может быть сделано с Unions - вы близки, и ошибка весьма полезна - «Не определен определитель типов для интерфейса / объединения« Тип контента »- это означает, что вы должны написать этот преобразователь содержимого, который будет соответствовать правильный тип для contentTypeId. Я не могу вам здесь помочь, поскольку я пишу свои API GrapQL с Node.js.

Но я бы предложил использовать интерфейс здесь. Если у вас есть интерфейс для поиска, вы можете легко написать такую ​​схему:

extend type Query {
    search(
        name: String,
        category: String
    ): [Searchable]
}

interface Searchable {
    contentTypeId: Int
    name: String
}

type Fish implements Searchable {
    contentTypeId: Int
    name: String    
    weight: Float
}

type Fruit implements Searchable {
    contentTypeId: Int
    name: String
    Color: String
}

type Toy implements Searchable {
    contentTypeId: Int
    name: String
    description: String
}

Вот хорошее объяснение того, когда использовать интерфейсы и союзы:

https://medium.com/the-graphqlhub/graphql-tour-interfaces-and-unions-7dd5be35de0d

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