【问题标题】:GraphQL: best way to manage mutations with interfaces?GraphQL:使用接口管理突变的最佳方法?
【发布时间】:2018-06-20 11:36:58
【问题描述】:

我是 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. 如果我想传递一个对象作为参数,这个对象必须是“输入”类型。但“Pizza”、“Salad”和“BasicFood”只是“类型”。
  2. 输入类型无法实现接口。

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

感谢您的帮助。

【问题讨论】:

    标签: interface graphql apollo mutation


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 2020-12-19
      • 2022-01-26
      相关资源
      最近更新 更多