在GraphQL schema中处理类型变更

GraphQL是一种查询语言,它允许我们使用统一的API来获取数据,减少数据响应的复杂性。 GraphQL中的schema定义了API中可用的类型和字段。在实际应用中,schema是一个重要的组成部分,我们需要处理它的变更以保持API的一致性和稳定性。

处理类型变更的方法

GraphQL schema有两个部分:类型定义和字段定义。 如果我们更改了任何一个部分,API的行为可能会发生不兼容的改变。 在以下情况下,如果我们需要更改API,则必须更改schema中的定义:

  • 添加一个新的查询类型
  • 删除一个现有查询类型
  • 添加一个新的数据类型
  • 删除一个现有数据类型
  • 更新字段名称
  • 更改字段类型
  • 更改字段的返回值

在以下情况下,我们可以不更改现有的schema:

  • 添加新的查询字段
  • 更改某个字段的默认值

在GraphQL中,要处理类型变更,我们可以使用以下两个方法:

Backward-compatible Changes

Backward-compatible变更是指可以在不更改现有客户端行为的情况下进行更改的变更。在这种情况下,我们只需添加一个新的字段或类型,而不是删除或更改现有的字段或类型。

例如,在以下schema中:

---- ---- -
  ----- -------
  ------ -------
  ---- ---
-

我们可以添加一个新的字段,而不会破坏现有客户端的行为:

---- ---- -
  ----- -------
  ------ -------
  ---- ---
  -------- ------
-

现有的客户端可以忽略新的“address”字段,而不受影响。

Breaking Changes

Breaking Changes是指更改现有客户端行为的更改。在这种情况下,我们需要更改现有的字段或类型,这样可能会影响现有客户端的数据获取方式。

例如,在以下schema中:

---- ---- -
  ----- -------
  ------ -------
  ---- ---
-

如果我们更改“email”字段的类型为整数,这样可能会破坏现有客户端的数据获取方式:

---- ---- -
  ----- -------
  ------ ----
  ---- ---
-

在这种情况下,我们必须更新现有的客户端代码以适应新的schema更改。

以代码为例

我们可以通过使用GraphQL schema的Javascript语言扩展(.gql.graphql)来定义schema。在下面的示例中,我们使用schema定义一个图书馆的查询:

---- ---- -
  ------ -------
  ------- -------
  ------ ----
-

---- ----- -
  ------------ ----- ------
-

现在,假设我们要添加一个description字段来描述每本图书的简介。为此,我们需要更改schema定义:

---- ---- -
  ------ -------
  ------- -------
  ------ ----
  ------------ ------
-

---- ----- -
  ------------ ----- ------
-

但是,如果我们尝试更改title字段的类型,例如更改为可选的字符串,则这可能会破坏我们的客户端代码:

---- ---- -
  ------ ------
  ------- -------
  ------ ----
  ------------ ------
-

---- ----- -
  ------------ ----- ------
-

在这种情况下,我们必须更新现有的客户端代码以适应新的schema更改。

结论

在GraphQL中,schema是API的核心组成部分。我们必须小心处理类型变更,以保持API的一致性和稳定性。对于Backward-compatible变更,我们可以添加新的字段和类型,而不破坏现有客户端的行为。对于Breaking Changes,我们必须更新现有的客户端代码。 处理类型变更需要小心谨慎,但需要有计划地进行,以确保API一直稳定并按预期工作。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6706326dd91dce0dc859c300