Other integrations

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