Skip to Content

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 { createCDNArtifactFetcher } from '@graphql-hive/core' import { buildHTTPExecutor } from '@graphql-tools/executor-http' import { stitchSchemas } from '@graphql-tools/stitch' const fetcher = createCDNArtifactFetcher({ endpoint: [ 'https://cdn.graphql-hive.com/artifacts/v1/<target_id>/services', 'https://cdn-mirror.graphql-hive.com/artifacts/v1/<target_id>/services' ], accessKey: '<cdn_access_key>' }) async function main() { const services = JSON.parse(await fetcher.fetch()) 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) })

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.

Additional Resources

Last updated on