apollo-federation

作者: apollographql

Apollo Federation 支持将多个 GraphQL API(子图)组合成一个统一的超级图。

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

Apollo Federation Schema Authoring

Apollo Federation enables composing multiple GraphQL APIs (subgraphs) into a unified supergraph.

Federation 2 Schema Setup

Every Federation 2 subgraph must opt-in via @link:

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

Import only the directives your subgraph uses. The version shown (v2.12) is illustrative — check the Federation changelog for currently supported versions before copying it verbatim.

A subgraph's @link version is a floor, not the composition version — see Federation versions for the full explanation.

Core Directives Quick Reference

DirectivePurposeExample
@keyDefine entity with unique keytype Product @key(fields: "id")
@shareableAllow multiple subgraphs to resolve fieldtype Position @shareable { x: Int! }
@externalReference field from another subgraphweight: Int @external
@requiresComputed field depending on external fieldsshippingCost: Int @requires(fields: "weight")
@providesConditionally resolve external field@provides(fields: "name")
@overrideMigrate field to this subgraph@override(from: "Products")
@inaccessibleHide from API schemainternalId: ID! @inaccessible
@interfaceObjectAdd fields to entity interfacetype Media @interfaceObject

Reference Files

Detailed documentation for specific topics:

  • Directives - All federation directives with syntax, examples, and rules
  • Schema Patterns - Multi-subgraph patterns and recipes
  • Composition - Composition rules, error codes, and debugging

Key Patterns

Entity Definition

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

Entity Contributions Across Subgraphs

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

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

Computed Fields with @requires

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

Value Types with @shareable

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

Entity Stub (Reference Without Contributing)

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

Ground Rules

  • ALWAYS use Federation 2.x syntax with @link directive
  • ALWAYS import only the directives your subgraph uses
  • NEVER use @shareable without ensuring all subgraphs return identical values for that field
  • PREFER @key with single ID field for simple entity identification
  • USE rover supergraph compose to validate composition locally
  • USE rover subgraph check to validate against production supergraph

来自 apollographql 的更多技能

apollo-ios
apollographql
Apollo iOS 是一个面向 Apple 平台的强类型 GraphQL 客户端。它从你的 GraphQL 操作和模式生成 Swift 类型,并附带一个 async/await 客户端、一个规范化缓存(内存或 SQLite 支持)、一个可插拔的基于拦截器的 HTTP 传输层(处理查询、变更和多部分订阅),以及一个可选的 WebSocket 传输层(graphql-transport-ws),可承载任何操作类型。
apollo-router
apollographql
Apollo Router 是一个用 Rust 编写的高性能图形路由器,用于运行 Apollo Federation 2 超级图。它位于子图前端,负责查询规划、执行和响应组合。
apollo-router-plugin-creator
apollographql
为Apollo Router创建原生Rust插件。
apollo-server
apollographql
使用Apollo Server 5.x跨框架构建GraphQL服务器的完整指南。涵盖模式定义、解析器、上下文设置以及支持TypeScript的错误处理。支持用于原型开发的独立模式以及与Express、Fastify、Koa和无服务器环境的集成。包含解析器模式、身份验证/授权、插件、用于防止N+1问题的DataLoader以及性能优化技术。提供数据源、错误...的参考文档。
graphql-operations
apollographql
编写高效、类型安全的GraphQL操作及使用片段组织操作的最佳实践指南。涵盖查询、变更、订阅和片段,包括命名约定、变量语法和指令使用。强调核心原则:仅请求所需字段、命名所有操作、使用变量而非硬编码值、包含id字段以实现可缓存性。建议将片段与组件共置,并使用@include/@skip指令实现条件字段...
graphql-schema
apollographql
行业最佳实践指南,旨在设计直观、高性能且易于维护的GraphQL模式。涵盖核心设计原则,包括以客户端为中心的类型组织、显式可空性模式以及向后兼容的演进策略。提供关于类型、命名约定、基于游标的分页、错误建模和安全注意事项的参考文档。包含接口、联合类型、输入类型、变更操作和ID策略的实用模式及代码示例...
rover
apollographql
用于管理GraphQL模式、联邦架构和本地超图开发的Apollo Rover CLI。可发布、获取和验证子图模式;通过GraphOS本地或远程组合联邦超图。包含模式检查(部署前验证)、代码检查以及从运行服务器进行内省。rover dev命令启动本地路由器,自动进行模式组合以支持开发工作流。支持CI/CD模式,提供发布前检查验证和用于脚本的JSON输出。需要...
rust-best-practices
apollographql
基于Apollo GraphQL最佳实践手册的习惯性Rust编码标准。涵盖九个核心领域:编码风格与习惯用法、clippy lint检查、性能优化、错误处理、测试模式、泛型与分发、类型状态模式、文档编写及指针安全。强调借用优于克隆、使用thiserror/anyhow进行基于Result的错误处理、以及通过release构建进行性能分析。包含所有权模式、避免panic等快速参考指南...