スキーマの設定
スキーマの設定スキーマの名前空間

スキーマの名前空間

プラグインによってスキーマに追加されたすべての型とインターフェースに、自動的に名前空間を適用します。

スキーマに名前空間を適用することで、命名の競合を回避できます。命名の競合は、異なるオーナー(例:社内の異なるチーム、またはサードパーティプラグイン同士)が型やインターフェースに同じ名前を使用した場合に発生します。

たとえば、「AwesomeWP」という会社にTutorialsチームとSalesチームがあり、両チームが会社のGraphQLスキーマに対してProduct型を作成した場合、競合が発生します。

スキーマに名前空間を適用することで、この2つの型は自動的にAwesomeWPTutorialsProductAwesomeWPSalesProductに変換され、スキーマを手動で修正したり、チーム同士がやり取りしたりすることなく、競合を回避できます。

WordPressデータモデルのエンティティには名前空間が適用されない

WordPressデータモデルは標準的なものとして扱われており、そのGraphQLスキーマの型(PostUserなど)およびインターフェース(CommentableWithMetaなど)には名前空間が適用されません。

エンドポイントにおけるスキーマの名前空間

スキーマに名前空間を適用するかどうかは、2つのレベルで定義できます。優先順位の高い順に:

1. スキーマ設定での定義

カスタムエンドポイントまたはpersisted queryに対してスキーマの名前空間を適用するかどうかは、対応するスキーマ設定で定義できます:

スキーマ設定での名前空間の設定

2. 設定で定義されたデフォルトモード

スキーマ設定の値が"Default"の場合、設定で定義されたモードが使用されます:

設定での名前空間
設定での名前空間

名前空間が適用されたスキーマの可視化

Voyagerクライアントを使用して、名前空間が適用されたスキーマを可視化できます。

名前空間が無効の場合、WordPressスキーマは次のように表示されます:

インタラクティブスキーマ

有効にすると、プラグインによって追加された型とインターフェースに名前空間が適用され、次のように表示されます:

名前空間が適用されたインタラクティブスキーマ

名前空間が適用された(または適用されていない)型名のクエリ

名前空間が有効になると、型は名前空間が適用された型名と適用されていない型名の両方を使用してクエリできます。そのため、編集が必要なのは競合する型を含むクエリのみであり、すべてのクエリを編集する必要はありません。

たとえば、AwesomeWPのSalesチームにもDiscount型がある場合、この型名を要求するクエリは引き続き機能します:

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

競合する型Productのみを、曖昧さを排除するためにクエリ内でAwesomeWPSalesProductに更新する必要があります:

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

GraphQL仕様

この機能は現在GraphQL仕様には含まれていませんが、以下で要求されています: