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 个原因,这不起作用:

  1. 如果我想传递一个对象作为参数,这个对象必须是 "input" 类型。但是 "Pizza"、"Salad" 和 "BasicFood" 只是 "type"。
  2. 输入类型不能实现接口。

所以,我的问题是:如何在这种接口上下文中处理突变,而不必过多地复制类型?我想避免使用用于查询的 Pizza 类型和用于突变的 InputPizza 类型。

感谢您的帮助。

输入和输出类型是根本不同的东西,只是因为您可能有一些碰巧代表相似的对象(例如 PizzaPizzaInput),这是错误的等价。

假设在您的模式中 Pizza 有一个强制性 ID 字段(您的 ID 不是强制性的,但可能应该是)。 PizzaInput 有一个 ID 字段可能没有意义——它将由服务器生成。我要说的是,除了最简单的系统,其他任何系统都需要进行处理,将用户输入转换为成熟的对象 return.

你只需要硬着头皮去做感觉像是重复的工作,你会看到长期的好处 运行。