配置 Schema
配置 Schema为 Schema 添加命名空间

为 Schema 添加命名空间

让插件添加到 Schema 中的所有类型和接口自动应用命名空间。

为 Schema 添加命名空间可以避免命名冲突。命名冲突发生在不同所有者(例如:公司内不同团队,或第三方插件之间)对类型或接口使用相同名称时。

例如,假设公司「AwesomeWP」有 Tutorials 团队和 Sales 团队,两个团队都为公司的 GraphQL Schema 创建了 Product 类型,从而产生冲突。

通过为 Schema 添加命名空间,这两种类型将自动转换为 AwesomeWPTutorialsProductAwesomeWPSalesProduct,无需手动修改 Schema 或让团队之间进行协调,即可避免冲突。

WordPress 数据模型的实体不应用命名空间

WordPress 数据模型被视为规范数据模型,其 GraphQL Schema 类型(如 PostUser)以及接口(如 CommentableWithMeta)不应用命名空间。

在端点中为 Schema 添加命名空间

可以在两个层级定义 Schema 是否应用命名空间,按优先级由高到低排列:

1. 在 Schema 配置中设置

可以通过相应的 Schema 配置,为自定义端点或 persisted query 定义是否应用命名空间:

在 Schema 配置中设置命名空间

2. 在设置中定义的默认模式

如果 Schema 配置的值为 "Default",则使用在设置中定义的模式:

设置中的命名空间
设置中的命名空间

可视化命名空间 Schema

使用 Voyager 客户端 来可视化命名空间 Schema。

禁用命名空间时,WordPress Schema 如下所示:

交互式 Schema

启用后,插件添加的类型和接口将应用命名空间,如下所示:

应用命名空间的交互式 Schema

查询(未)应用命名空间的类型名称

启用命名空间后,可以使用命名空间类型名称和非命名空间类型名称来查询类型。因此,只需编辑涉及冲突类型的 Query,而无需编辑所有 Query。

例如,如果 AwesomeWP 的 Sales 团队也有 Discount 类型,查询该类型名称的 Query 仍然有效:

query {
  discounts {
    ...DiscountProps
  }
}
 
fragment DiscountProps on Discount {
  price
  dateRange
}

只有冲突的类型 Product 需要在 Query 中更新为 AwesomeWPSalesProduct,以消除歧义:

query {
  products {
    ...ProductProps
  }
}
 
fragment ProductProps on AwesomeWPSalesProduct {
  price
  dateRange
}

GraphQL 规范

此功能目前不在 GraphQL 规范中,但已在以下位置提出请求: