GraphQL:使用接口管理突变的最佳方式?
GraphQL: best way to manage mutations with interfaces?
我是 GraphQL 的新手,但我真的很喜欢它。现在我正在玩接口和联合,我面临着突变的问题。
假设我有这个模式:
interface FoodType {
id: String
type: String
}
type Pizza implements FoodType {
id: String
type: String
pizzaType: String
toppings: [String]
size: String
}
type Salad implements FoodType {
id: String
type: String
vegetarian: Boolean
dressing: Boolean
}
type BasicFood implements FoodType {
id: String
type: String
}
现在,我想创造新的食物,所以我开始做这样的事情:
type Mutation {
addPizza(input:Pizza):FoodType
addSalad(input:Salad):FoodType
addBasic(input:BasicFood):FoodType
}
由于 2 个原因,这不起作用:
- 如果我想传递一个对象作为参数,这个对象必须是 "input" 类型。但是 "Pizza"、"Salad" 和 "BasicFood" 只是 "type"。
- 输入类型不能实现接口。
所以,我的问题是:如何在这种接口上下文中处理突变,而不必过多地复制类型?我想避免使用用于查询的 Pizza 类型和用于突变的 InputPizza 类型。
感谢您的帮助。
输入和输出类型是根本不同的东西,只是因为您可能有一些碰巧代表相似的对象(例如 Pizza
和 PizzaInput
),这是错误的等价。
假设在您的模式中 Pizza
有一个强制性 ID 字段(您的 ID 不是强制性的,但可能应该是)。 PizzaInput
有一个 ID 字段可能没有意义——它将由服务器生成。我要说的是,除了最简单的系统,其他任何系统都需要进行处理,将用户输入转换为成熟的对象 return.
你只需要硬着头皮去做感觉像是重复的工作,你会看到长期的好处 运行。
我是 GraphQL 的新手,但我真的很喜欢它。现在我正在玩接口和联合,我面临着突变的问题。
假设我有这个模式:
interface FoodType {
id: String
type: String
}
type Pizza implements FoodType {
id: String
type: String
pizzaType: String
toppings: [String]
size: String
}
type Salad implements FoodType {
id: String
type: String
vegetarian: Boolean
dressing: Boolean
}
type BasicFood implements FoodType {
id: String
type: String
}
现在,我想创造新的食物,所以我开始做这样的事情:
type Mutation {
addPizza(input:Pizza):FoodType
addSalad(input:Salad):FoodType
addBasic(input:BasicFood):FoodType
}
由于 2 个原因,这不起作用:
- 如果我想传递一个对象作为参数,这个对象必须是 "input" 类型。但是 "Pizza"、"Salad" 和 "BasicFood" 只是 "type"。
- 输入类型不能实现接口。
所以,我的问题是:如何在这种接口上下文中处理突变,而不必过多地复制类型?我想避免使用用于查询的 Pizza 类型和用于突变的 InputPizza 类型。
感谢您的帮助。
输入和输出类型是根本不同的东西,只是因为您可能有一些碰巧代表相似的对象(例如 Pizza
和 PizzaInput
),这是错误的等价。
假设在您的模式中 Pizza
有一个强制性 ID 字段(您的 ID 不是强制性的,但可能应该是)。 PizzaInput
有一个 ID 字段可能没有意义——它将由服务器生成。我要说的是,除了最简单的系统,其他任何系统都需要进行处理,将用户输入转换为成熟的对象 return.
你只需要硬着头皮去做感觉像是重复的工作,你会看到长期的好处 运行。