gpt4 book ai didi

migration - 是否可以在GraphQL上弃用突变?

转载 作者:行者123 更新时间:2023-12-03 09:28:55 24 4
gpt4 key购买 nike

我有一个我们想弃用的变体:

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非常适合创建Object,但不适用于更新它。

我们尝试使突变重载或将突变标记为已弃用,但均无济于事。

我们提出的唯一其他解决方案是将新的updateObject突变重命名为其他名称,例如“newUpdateObject”,或者使id和object字段弃用且为可选,然后添加字段“updateObject”或在新的UpdateObjectInput中。但是,这些都不是最优的。

还有另一种方法可以完成迁移吗?

最佳答案

弃用字段是一种修饰-它仅引入可由客户端工具使用的元数据,并且可以在不更改字段说明的情况下提供有关该字段的其他信息。如果对模式的更改原本是一项重大更改,那么避免给客户造成问题的唯一方法是引入新的字段和/或参数。您已经介绍了一些选项:

  • 在变异类型
  • 上创建一个新字段
    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。在其当前端点维护现有架构,但在其他端点引入更新的架构。指导您的客户团队切换到新端点。
  • 仅介绍重大更改。可以与客户团队进行协调,以便在某个可接受的维护时段内将更改部署到服务器和客户端。
  • 关于migration - 是否可以在GraphQL上弃用突变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48213151/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com