Schema-Stitching
Installation
npm i @graphql-hive/core
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/core
package exports a utility function called createServicesFetcher
that can
be used to fetch services definition from Hive’s CDN. You can use it to create a GraphQL schema from
the all services schemas published to Hive.
The createServicesFetcher
function is a part of the @graphql-hive/core
package, and it can be
used with any GraphQL server runtime. You may use it with Apollo Server, GraphQL Yoga, or any
other library to implement a custom GraphQL gateway.
Fetching Services Info from 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.
In this example, we are using GraphQL-Yoga to create the Gateway server.
import { createServer } from 'node:http'
import { buildSchema } from 'graphql'
import { createYoga } from 'graphql-yoga'
import { createServicesFetcher } from '@graphql-hive/core'
import { buildHTTPExecutor } from '@graphql-tools/executor-http'
import { stitchSchemas } from '@graphql-tools/stitch'
const fetchServices = createServicesFetcher({
// The CDN endpoint you are using here should not end with any artifact name.
// So drop the "/sdl" or "/services" from the URL get from Hive dashboard.
endpoint: process.env.HIVE_CDN_ENDPOINT,
key: process.env.HIVE_CDN_KEY
})
async function main() {
const services = await fetchServices()
const subschemas = services.map(service => {
return {
schema: buildSchema(service.sdl),
executor: buildHTTPExecutor({ endpoint: service.url })
}
})
const schema = stitchSchemas({ subschemas })
const yoga = createYoga({ schema })
const server = createServer(yoga)
server.listen(4000, () => {
console.info('Gateway is running on http://localhost:4000/graphql')
})
}
main().catch(err => {
console.error(err)
process.exit(1)
})
The HIVE_CDN_ENDPOINT
variable should not include any artifact suffix (for example,
/services
), it should be in the following format:
https://cdn.graphql-hive.com/artifacts/v1/TARGET_ID
Usage Reporting
Based on the server runtime you choosed, you can enable the usage reporting activate the Hive plugin for the server you are running.