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 { 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.

Additional Resources

Last updated on