【问题标题】:GraphQL versioning, not nullable to nullableGraphQL 版本控制,不可为空到可空
【发布时间】:2018-01-09 20:24:16
【问题描述】:

一开始我们有架构

type User {
  id: ID!
  name: String!
  birthday: String!
}

一段时间后,决定生日对新用户来说不是强制性的,因此架构应该更改为

type User {
  id: ID!
  name: String!
  birthday: String
}

这是重大变化。

如何在 GraphQL 中对这种情况进行版本控制?

【问题讨论】:

  • User 类型中添加字段version 怎么样?
  • @Romper 关于graphql 版本控制的好文章是herehere。但在您的具体情况下,我不确定为什么将架构更改为 birthday: String 是一项重大更改 - 旧 API 请求/旧数据应该仍然有效。
  • @yishaiz 老客户会崩溃,他们知道这个字段不可为空,但我们会发送空,因为我们没有所有用户的生日
  • 我明白了。所以在我给你的链接中,有几种方法可以处理它。

标签: graphql


【解决方案1】:

正如these official best practicesversioning 部分中提到的,即使没有任何技术问题,也不建议在 GraphQL 中进行传统的 API 版本控制。我会觉得我们正在破坏我们的模型,因为它会在业务 API 中引入一个技术领域......这绝对不理想。

为了帮助管理 API 的发展,他们引入了 字段弃用 的概念,如 this link 中所述。

总而言之,我想说你基本上有两种解决方案:

  1. 无论如何都要进行版本控制;
  2. 将您的字段 birthday 设置为已弃用,并添加一个具有等效名称的新字段(birthday_date 可能吗?)。显然,不要忘记告诉您的 api 客户端使用这个新字段。从长远来看,请删除已弃用的字段。

【讨论】:

    猜你喜欢
    • 2018-01-28
    • 2018-03-27
    • 2019-04-11
    • 2017-03-07
    • 2021-08-26
    • 2020-01-09
    • 1970-01-01
    • 2023-02-18
    • 1970-01-01
    相关资源
    最近更新 更多