首页 文章

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

提问于
浏览
1

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

这不起作用有两个原因:

  • 如果我想将对象作为参数传递,则该对象必须是"input"类型 . 但"Pizza","Salad"和"BasicFood"只是"type" .

  • 输入类型无法实现接口 .

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

谢谢您的帮助 .

1 回答

  • 0

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

    假设在你的模式中 Pizza 有一个强制的id字段(你的ID是't mandatory, but probably should be). It probably wouldn'有意义的 PizzaInput 有一个ID字段 - 它将由服务器生成 . 点i 'm making is that in anything but the simplest systems, there'将要处理以将用户输入转换为一个完全成熟的物体返回 .

    你只需要咬紧牙关,做重复工作的感觉,从长远来看,你会看到好处 .

相关问题