Apollo Gateway
Apollo-Gateway is the JavaScript Apollo Federation gateway runtime.
Hive integrates with Apollo Gateway to provide the Supergraph schema information required for running a federated graph gateway, once all schemas are published.
Installation
npm i @graphql-hive/apollo
We recommend installing Hive Client package as a direct dependency of your project, because it includes a runtime to send usage reports and schemas to Hive registry.
The @graphql-hive/apollo
package exports a utility function called createSupergraphManager
that
fetches the Supergraph schema from the Hive’s CDN, and also a
Apollo-Server plugin for reporting operations.
Supergraph SDL from the CDN
Once you have all services schemas pushed to Hive, and available in the CDN, you can create a CDN Access Token and gain access to the CDN endpoint.
With the endpoint and CDN access token available, you can integrate Hive with Apollo Gateway:
import { ApolloGateway } from '@apollo/gateway'
import { ApolloServer } from '@apollo/server'
import { startStandaloneServer } from '@apollo/server/standalone'
import { createSupergraphManager } from '@graphql-hive/apollo'
const gateway = new ApolloGateway({
// Apollo Gateway will fetch Supergraph from Hive CDN
supergraphSdl: createSupergraphManager({
endpoint: 'HIVE_CDN_ENDPOINT',
key: 'HIVE_CDN_KEY',
pollIntervalInMs: 15_000
})
})
const server = new ApolloServer({ gateway })
const { url } = await startStandaloneServer({ server })
console.log(`🚀 Server ready at ${url}`)
Usage Reporting
For more configuration options, such as sampling, client name and version reporting, please refer to the Hive client configuration reference.
To enable Usage Reporting with your Apollo Gateway, you can use the Hive plugin for Apollo Server:
import { ApolloGateway } from '@apollo/gateway'
import { ApolloServer } from '@apollo/server'
import { startStandaloneServer } from '@apollo/server/standalone'
import { createSupergraphManager, useHive } from '@graphql-hive/apollo'
const gateway = new ApolloGateway({
// Apollo Gateway will fetch Supergraph from Hive CDN
supergraphSdl: createSupergraphManager({
endpoint: process.env.HIVE_CDN_ENDPOINT,
key: process.env.HIVE_CDN_KEY,
pollIntervalInMs: 15_000
})
})
const server = new ApolloServer({
gateway,
plugins: [
useHive({
enabled: true,
token: 'YOUR-TOKEN',
usage: true // add this one to report usage and operations
})
]
})
const { url } = await startStandaloneServer({ server })
console.log(`🚀 Server ready at ${url}`)
The HIVE_CDN_ENDPOINT
variable should NOT include any artifact suffix (for example,
/supergraph
), it should be in the following format:
https://cdn.graphql-hive.com/artifacts/v1/TARGET_ID