【发布时间】:2018-06-24 22:47:08
【问题描述】:
我是 GraphQL 的新手,但我真的很喜欢它。现在我正在使用接口和联合,我面临着突变的问题。
假设我有这个架构:
interface FoodType {
id: String
type: String
composition: [Ingredient]
}
type Pizza implements FoodType {
id: String
type: String
pizzaType: String
toppings: [String]
size: String
composition: [Ingredient]
}
type Salad implements FoodType {
id: String
type: String
vegetarian: Boolean
dressing: Boolean
composition: [Ingredient]
}
type BasicFood implements FoodType {
id: String
type: String
composition: [Ingredient]
}
type Ingredient {
name: String
qty: Float
units: String
}
现在,我想创造新的食物,所以我开始做这样的事情:
type Mutation {
addPizza(input:Pizza):FoodType
addSalad(input:Salad):FoodType
addBasic(input:BasicFood):FoodType
}
这不起作用有两个原因:
- 如果我想传递一个对象作为参数,这个对象必须是“输入”类型。但“Pizza”、“Salad”和“BasicFood”只是“类型”。
- 输入类型不能实现接口。
所以,我需要像这样修改我以前的架构:
interface FoodType {
id: String
type: String
composition: [Ingredient]
}
type Pizza implements FoodType {
id: String
type: String
pizzaType: String
toppings: [String]
size: String
composition: [Ingredient]
}
type Salad implements FoodType {
id: String
type: String
vegetarian: Boolean
dressing: Boolean
composition: [Ingredient]
}
type BasicFood implements FoodType {
id: String
type: String
composition: [Ingredient]
}
type Ingredient {
name: String
qty: Float
units: String
}
type Mutation {
addPizza(input: PizzaInput): FoodType
addSalad(input: SaladInput): FoodType
addBasic(input: BasicInput): FoodType
}
input PizzaInput {
type: String
pizzaType: String
toppings: [String]
size: String
composition: [IngredientInput]
}
input SaladInput {
type: String
vegetarian: Boolean
dressing: Boolean
composition: [IngredientInput]
}
input BasicFoodInput {
type: String
composition: [IngredientInput]
}
input IngredientInput {
name: String
qty: Float
units: String
}
所以,我在这里定义了我的 3 种披萨、沙拉和基本食物的创建方法。 我需要定义 3 种输入类型(每种食物一种) 而且我还需要为成分定义一个新的输入类型。
它会产生很多重复。那样你觉得可以吗?或者有更好的方法来解决这个问题?
谢谢
【问题讨论】: