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
@shareablesans s'assurer que tous les subgraphs retournent des valeurs identiques pour ce champ - PRÉFÉRER
@keyavec un seul champ ID pour l'identification simple d'entité - UTILISER
rover supergraph composepour valider la composition localement - UTILISER
rover subgraph checkpour valider contre le supergraph de production