gpt4 book ai didi

graphql - GraphQL 模式定义语言中的别名类型

转载 作者:行者123 更新时间:2023-12-03 17:29:38 29 4
gpt4 key购买 nike

我今天在生产中有以下 graphql 模式定义:

type BasketPrice {
amount: Int!
currency: String!
}

type BasketItem {
id: ID!
price: BasketPrice!
}

type Basket {
id: ID!
items: [BasketItem!]!
total: BasketPrice!
}

type Query {
basket(id: String!): Basket!
}

我想重命名 BasketPrice只是 Price ,但是这样做将是对模式的重大更改,因为客户端可能会在片段中引用它,例如
fragment Price on BasketPrice {
amount
currency
}

query Basket {
basket(id: "123") {
items {
price {
...Price
}
}
total {
...Price
}
}
}

我曾希望可以为向后兼容起别名,例如
type Price {
amount: Int!
currency: String!
}

# Remove after next release.
type alias BasketPrice = Price;

type BasketPrice {
amount: Int!
currency: String!
}

type BasketItem {
id: ID!
price: BasketPrice!
}

type Basket {
id: ID!
items: [BasketItem!]!
total: BasketPrice!
}

type Query {
basket(id: String!): Basket!
}

但这似乎不是一个功能。是否有推荐的方法来安全地重命名 graphql 中的类型而不会导致重大更改?

最佳答案

由于您已经指定的原因,没有办法重命名类型而不是破坏性更改。重命名类型是一种表面上的更改,而不是功能性的更改,因此没有实际的理由这样做。

处理架构的任何重大更改的最佳方法是在不同的端点上公开新架构,然后将客户端转换为使用新端点,从而有效地实现 API 的版本控制。

我能想到的解决此问题的唯一其他方法是为使用旧类型的任何字段创建新字段,例如:

type BasketItem {
id: ID!
price: BasketPrice! @ deprecated(reason: "Use itemPrice instead")
itemPrice: Price!
}

type Basket {
id: ID!
items: [BasketItem!]!
total: BasketPrice! @ deprecated(reason: "Use basketTotal instead")
basketTotal: Price!
}

关于graphql - GraphQL 模式定义语言中的别名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56892275/

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