是否可以弃用 GraphQL 上的变更?
Is it possible to deprecate a mutation on GraphQL?
我有一个我们想要弃用的突变:
updateObject(
id: String!
object: ObjectInput!
): Object!
我们想将其更改为:
updateObject(
object: UpdateObjectInput!
): Object!
其中 ObjectInput 和 UpdateObjectInput 是:
input ObjectInput {
product: String!
isPercentage: Boolean
amount: Float!
visibility: ObjectVisibility
isDiscontinued: Boolean
expiresAt: String
}
和
input UpdateObjectInput {
id: String!
visibility: ObjectVisibility
isDiscontinued: Boolean
expiresAt: String
}
基本上,ObjectInput 非常适合创建对象,但不适合更新它。
我们尝试过重载变更或将变更标记为已弃用,但均无效。
我们想出的唯一其他解决方案是将新的 updateObject 突变重命名为其他名称,例如 "newUpdateObject",或者使 id 和 object 字段弃用并可选,然后添加一个字段 "updateObject" 或接受新的 UpdateObjectInput 的东西。然而,这些都不是最佳的。
还有其他方法可以完成迁移吗?
弃用字段是装饰性的 -- 它只是引入了客户端工具可以使用的元数据,并且可以在不更改字段描述的情况下提供有关该字段的附加信息。如果对架构的更改本来就是重大更改,那么避免给客户带来问题的唯一方法是引入新字段 and/or 参数。您已经提出了一些选择:
- 在 Mutation 类型上创建一个新字段
updateObject(
id: String!
object: ObjectInput!
): Object! @deprecated("Use updateObject2 instead")
updateObject2(
object: UpdateObjectInput!
): Object!
- 在现有字段上创建一个新参数。目前只能弃用字段和枚举值——您不能将
@deprecated
应用于参数。
updateObject(
"""Don't use. Use object2 instead"""
id: String!
"""Don't use. Use object2 instead"""
object: ObjectInput!
object2: UpdateObjectInput!
): Object!
版本API。在其当前端点维护现有模式,但在不同的端点引入更新的模式。指导您的客户团队切换到新端点。
仅介绍重大更改。可以与客户端团队协调,在一些可接受的维护范围内将更改部署到服务器和客户端 window.
我有一个我们想要弃用的突变:
updateObject(
id: String!
object: ObjectInput!
): Object!
我们想将其更改为:
updateObject(
object: UpdateObjectInput!
): Object!
其中 ObjectInput 和 UpdateObjectInput 是:
input ObjectInput {
product: String!
isPercentage: Boolean
amount: Float!
visibility: ObjectVisibility
isDiscontinued: Boolean
expiresAt: String
}
和
input UpdateObjectInput {
id: String!
visibility: ObjectVisibility
isDiscontinued: Boolean
expiresAt: String
}
基本上,ObjectInput 非常适合创建对象,但不适合更新它。
我们尝试过重载变更或将变更标记为已弃用,但均无效。
我们想出的唯一其他解决方案是将新的 updateObject 突变重命名为其他名称,例如 "newUpdateObject",或者使 id 和 object 字段弃用并可选,然后添加一个字段 "updateObject" 或接受新的 UpdateObjectInput 的东西。然而,这些都不是最佳的。
还有其他方法可以完成迁移吗?
弃用字段是装饰性的 -- 它只是引入了客户端工具可以使用的元数据,并且可以在不更改字段描述的情况下提供有关该字段的附加信息。如果对架构的更改本来就是重大更改,那么避免给客户带来问题的唯一方法是引入新字段 and/or 参数。您已经提出了一些选择:
- 在 Mutation 类型上创建一个新字段
updateObject(
id: String!
object: ObjectInput!
): Object! @deprecated("Use updateObject2 instead")
updateObject2(
object: UpdateObjectInput!
): Object!
- 在现有字段上创建一个新参数。目前只能弃用字段和枚举值——您不能将
@deprecated
应用于参数。
updateObject(
"""Don't use. Use object2 instead"""
id: String!
"""Don't use. Use object2 instead"""
object: ObjectInput!
object2: UpdateObjectInput!
): Object!
版本API。在其当前端点维护现有模式,但在不同的端点引入更新的模式。指导您的客户团队切换到新端点。
仅介绍重大更改。可以与客户端团队协调,在一些可接受的维护范围内将更改部署到服务器和客户端 window.