添加Enum值是GraphQL的重大变化吗?

时间:2017-03-29 23:55:13

标签: graphql

根据GraphQL Best Practices,GraphQL服务应遵循“始终避免破坏更改并提供无版本API的常见做法。”

在Enum中添加一个值,如果遵循最佳实践,是否应该避免这种变化?

为了说明这一点,我们假设架构有这个枚举:

enum Episode {
  NEWHOPE
  EMPIRE
  JEDI
}

在未来的某个时候将enum演变成这样做是不好的做法:

enum Episode {
  NEWHOPE
  EMPIRE
  JEDI
  FORCEAWAKENS
  ROGUEONE
}

1 个答案:

答案 0 :(得分:2)

具体而言,重大更改是对架构结构的更改,这会导致已编写的查询失败。我无法在网上找到详尽的清单,但这里有一些例子突破了变化:

  • 从对象类型中删除字段(使用该字段的查询将变为无效)
  • 向字段添加必需参数(使用字段而不该参数的查询将变为无效)
  • 当新类型不是旧类型的超类型时更改字段的返回类型(例如,从Int更改为String,使用该字段的客户端可能会出现类型错误新的回应)。

新的枚举值可能会破坏客户端(如果它没有处理新案例的代码,可能会出现运行时错误),但我认为这是一个问题。客户端设计问题,但不是对架构的重大更改!