GraphQL:使用接口管理突变的最佳方法?

时间:2018-01-11 07:40:15

标签: interface graphql apollo mutation

我是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
}

这不起作用有两个原因:

  1. 如果我想将对象作为参数传递,则该对象必须是“输入”类型。但“披萨”,“沙拉”和“基本食品”只是“类型”。
  2. 输入类型无法实现接口。
  3. 所以,我的问题是:如何在接口的这个上下文中使用突变,而不必过多地复制类型?我想避免使用Pizza类型进行查询,使用InputPizza类型进行突变。

    感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

我们在您的架构中说Pizza有一个必填ID字段(您的ID不是强制性的,但可能应该是)。 PizzaInput拥有ID字段可能没有意义 - 它将由服务器生成。我要说的是,在最简单的系统中,除了最简单的系统之外,还有处理将用户输入转换为完全成熟的对象以便返回。

你必须咬紧牙关,做一些感觉像是重复工作的事情,从长远来看,你会看到好处。

相关问题