apollo-connectors

作者: apollographql

使用@source和@connect指令将REST API集成到GraphQL超级图中。提供结构化的5步流程:研究API结构、使用指令实现模式、通过rover supergraph compose验证、执行连接器以及测试覆盖。支持请求配置,包括标头、请求体负载、N+1模式的批处理以及通过$env注入环境变量。处理响应映射,包括字段选择、别名、嵌套数据的子选择以及实体...

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

Apollo Connectors Schema Assistant

MCP Tools

If GraphOS MCP Tools are available, use them:

  • connectors-spec: Fetch the complete Connectors specification before starting any connector work
  • apollo_docs_search: Search for relevant documentation
  • apollo_docs_read: Read specific documentation pages by slug

Documentation paths by topic:

  • Requests: /graphos/connectors/requests/url, /headers, /body, /batching
  • Responses: /graphos/connectors/responses/fields, /error-handling
  • Mapping: /graphos/connectors/mapping, /arrays, /enums, /literals
  • Entities: /graphos/connectors/entities, /patterns

Process

Follow this 5-step process. DO NOT skip any steps.

Step 1: Research

  • Understand the API being called and the structure of responses
  • Ask the user for example API responses if not provided
  • Fetch relevant documentation from MCP tools or reference files
  • DO NOT write any code until research is complete

Step 2: Implement

  • Create the schema using the template below
  • Follow the grammar, methods, and variables in the reference files
  • Ask clarifying questions if unsure about requirements

Step 3: Validate (Compose)

  • Run rover supergraph compose --config ./supergraph.yaml
  • Fix any composition errors before proceeding

Step 4: Execute

  • Run rover connector run --schema <file> -c "<Type.field>" -v "{}"
  • Verify the connector executes correctly

Step 5: Test

  • Create or update test files under /tests/
  • Run rover connector test
  • Ensure full test coverage for each connector

Schema Template

# Note to AI Friends: This is an Apollo Connectors schema. You should use your connectors-spec MCP tool if you have it available before editing this file.

extend schema
  @link(url: "https://specs.apollo.dev/federation/v2.12")
  @link(url: "https://specs.apollo.dev/connect/v0.3", import: ["@source", "@connect"])

@source(name: "api_name", http: { baseURL: "https://api.example.com" })

type Query {
  example(id: ID!): Example
    @connect(
      source: "api_name"
      http: { GET: "/example/{$args.id}" }
      selection: """
      id
      name
      """
    )
}

type Example {
  id: ID!
  name: String
}

Version Requirements: Always use federation/v2.12 and connect/v0.3 unless specified otherwise.

Reference Files

Before implementing connectors, read the relevant reference files:

Key Rules

Selection Mapping

  • Prefer sub-selections over ->map for cleaner mappings
  • Do NOT use $ when selecting fields directly from root
  • Field aliasing: newName: originalField (only when renaming)
  • Sub-selection: fieldName { ... } (to map nested content)
# DO - Direct sub-selection for arrays
$.results {
  firstName: name.first
  lastName: name.last
}

# DO NOT - Unnecessary root $
$ {
  id
  name
}

# DO - Direct field selection
id
name

Entities

  • Add @connect on a type to make it an entity (no @key needed)
  • Create entity stubs in parent selections: user: { id: userId }
  • When you see an ID field (e.g., productId), create an entity relationship
  • Each entity should have ONE authoritative subgraph with @connect

Literal Values

Use $() wrapper for literal values in mappings:

$(1)              # number
$(true)           # boolean
$("hello")        # string
$({"a": "b"})     # object

# In body
body: "$({ a: $args.a })"  # CORRECT
body: "{ a: $args.a }"     # WRONG - will not compose

Headers

http: {
  GET: "/api"
  headers: [
    { name: "Authorization", value: "Bearer {$env.API_KEY}" },
    { name: "X-Forwarded", from: "x-client" }
  ]
}

Batching

Convert N+1 patterns using $batch:

type Product @connect(
  source: "api"
  http: {
    POST: "/batch"
    body: "ids: $batch.id"
  }
  selection: "id name"
) {
  id: ID!
  name: String
}

Ground Rules

  • NEVER make up syntax or directive values not in this specification
  • NEVER use --elv2-license accept (for humans only)
  • ALWAYS ask for example API responses before writing code
  • ALWAYS validate with rover supergraph compose after changes
  • ALWAYS create entity relationships when you see ID fields
  • Prefer $env over $config for environment variables
  • Use rover dev for running Apollo Router locally

来自 apollographql 的更多技能

apollo-client
apollographql
Apollo Client 是一个全面的 JavaScript 状态管理库,使您能够通过 GraphQL 管理本地和远程数据。4.x 版本带来了改进的缓存、更好的 TypeScript 支持以及 React 19 兼容性。
official
apollo-client
apollographql
全面指南,涵盖使用Apollo Client 4.x构建React应用的查询、变更、缓存和状态管理。支持多种React框架和配置:客户端应用(Vite、CRA)、带React服务端组件的Next.js App Router、带流式SSR的React Router 7,以及TanStack Start。包含查询(useQuery、useLazyQuery)、变更(useMutation)的钩子,以及基于Suspense的模式(useSuspenseQuery、useBackgroundQuery),适用于现代React 18+和19...
official
apollo-federation
apollographql
Apollo Federation 支持将多个 GraphQL API(子图)组合成一个统一的超级图。
official
apollo-ios
apollographql
Apollo iOS 是一个面向 Apple 平台的强类型 GraphQL 客户端。它从你的 GraphQL 操作和模式生成 Swift 类型,并附带一个 async/await 客户端、一个规范化缓存(内存或 SQLite 支持)、一个可插拔的基于拦截器的 HTTP 传输层(处理查询、变更和多部分订阅),以及一个可选的 WebSocket 传输层(graphql-transport-ws),可承载任何操作类型。
official
apollo-kotlin
apollographql
Apollo Kotlin 是一个强类型的 GraphQL 客户端,能够根据你的 GraphQL 操作和模式生成 Kotlin 模型,可用于 Android、JVM 和 Kotlin 多平台项目。
official
apollo-mcp-server
apollographql
通过模型上下文协议将AI智能体连接到GraphQL API,内置内省与操作工具。将GraphQL操作暴露为MCP工具;支持三种操作来源:本地文件、GraphOS Studio集合和持久化查询清单。提供四种内省工具(introspect、search、validate、execute)用于模式探索和临时查询测试;压缩模式通过紧凑符号减少令牌使用。可通过静态标头配置身份验证...
official
apollo-router
apollographql
Apollo Router 是一个用 Rust 编写的高性能图形路由器,用于运行 Apollo Federation 2 超级图。它位于子图前端,负责查询规划、执行和响应组合。
official
apollo-router-plugin-creator
apollographql
为Apollo Router创建原生Rust插件。
official