apollo-federation

Guide pour la création de schémas de subgraph Apollo Federation. Utilisez cette skill quand : (1) vous créez de nouveaux schémas de subgraph pour un supergraph fédéré, (2) vous définissez ou modifiez des entités avec `@key`, (3) vous partagez des types/champs entre subgraphs avec `@shareable`, (4) vous travaillez avec les directives de federation (`@external`, `@requires`, `@provides`, `@override`, `@inaccessible`), (5) vous résolvez des erreurs de composition, (6) toute tâche impliquant des patterns de conception de schéma federation.

npx skills add https://github.com/apollographql/skills --skill apollo-federation

Authoring de schémas Apollo Federation

Apollo Federation permet de composer plusieurs APIs GraphQL (subgraphs) en un supergraph unifié.

Configuration du schéma Federation 2

Chaque subgraph Federation 2 doit s'enregistrer via @link :

extend schema
  @link(url: "https://specs.apollo.dev/federation/v2.12",
        import: ["@key", "@shareable", "@external", "@requires", "@provides"])

Importez uniquement les directives que votre subgraph utilise.

Référence rapide des directives principales

Directive Objectif Exemple
@key Définir une entité avec une clé unique type Product @key(fields: "id")
@shareable Permettre à plusieurs subgraphs de résoudre un champ type Position @shareable { x: Int! }
@external Référencer un champ depuis un autre subgraph weight: Int @external
@requires Champ calculé dépendant de champs externes shippingCost: Int @requires(fields: "weight")
@provides Résoudre conditionnellement un champ externe @provides(fields: "name")
@override Migrer un champ vers ce subgraph @override(from: "Products")
@inaccessible Masquer du schéma API internalId: ID! @inaccessible
@interfaceObject Ajouter des champs à l'interface d'une entité type Media @interfaceObject

Fichiers de référence

Documentation détaillée pour des sujets spécifiques :

  • Directives - Toutes les directives de federation avec syntaxe, exemples et règles
  • Motifs de schéma - Motifs multi-subgraphs et recettes
  • Composition - Règles de composition, codes d'erreur et débogage

Motifs clés

Définition d'entité

type Product @key(fields: "id") {
  id: ID!
  name: String!
  price: Int
}

Contributions d'entité entre subgraphs

# Subgraph Products
type Product @key(fields: "id") {
  id: ID!
  name: String!
  price: Int
}

# Subgraph Reviews
type Product @key(fields: "id") {
  id: ID!
  reviews: [Review!]!
  averageRating: Float
}

Champs calculés avec @requires

type Product @key(fields: "id") {
  id: ID!
  size: Int @external
  weight: Int @external
  shippingEstimate: String @requires(fields: "size weight")
}

Types valeur avec @shareable

type Money @shareable {
  amount: Int!
  currency: String!
}

Stub d'entité (référence sans contribution)

type Product @key(fields: "id", resolvable: false) {
  id: ID!
}

Règles fondamentales

  • TOUJOURS utiliser la syntaxe Federation 2.x avec la directive @link
  • TOUJOURS importer uniquement les directives que votre subgraph utilise
  • NE JAMAIS utiliser @shareable sans s'assurer que tous les subgraphs retournent des valeurs identiques pour ce champ
  • PRÉFÉRER @key avec un seul champ ID pour l'identification simple d'entité
  • UTILISER rover supergraph compose pour valider la composition localement
  • UTILISER rover subgraph check pour valider contre le supergraph de production

Skills similaires