Join us from October 8-10 in New York City to learn the latest tips, trends, and news about GraphQL federation and API platform engineering.Join us for GraphQL Summit 2024 in NYC
Docs
Start for Free

Apollo Federation Quickstart

Part 3: Local composition


Back in Part 2, we used with to compose our 's . Next, let's try out composing locally with the .

1. Provide subgraph details

Like GraphOS Studio, the Rover CLI needs the following information about each of our to compose them:

  • The 's schema
  • The URL of the subgraph's endpoint (which must be accessible by the router)

To provide these details to , we define a YAML configuration file.

In your router project directory, create a file called supergraph-config.yaml and paste the following into it:

supergraph-config.yaml
federation_version: 2
subgraphs:
locations:
routing_url: https://flyby-locations-sub.herokuapp.com/
schema:
subgraph_url: https://flyby-locations-sub.herokuapp.com/
reviews:
routing_url: https://flyby-reviews-sub.herokuapp.com/
schema:
subgraph_url: https://flyby-reviews-sub.herokuapp.com/

As you can see, we're providing the same URL as the value of two different . These fields serve different purposes:

  • routing_url is the URL the router will use to send GraphQL to the subgraph at runtime.
  • schema.subgraph_url is the URL that Rover will use to fetch the for purposes.

These URLs might theoretically differ. The YAML file also supports providing a subgraph's schema as a local file path, or as a registered that Rover can fetch from Apollo (for details, see the Rover docs).

2. Perform composition

Now that our configuration file is ready, we can compose our supergraph schema. To do that, we'll use Rover's supergraph compose command.

From your project directory, run the following command in your terminal:

rover supergraph compose --config ./supergraph-config.yaml

NOTE

The first time you run this command with a Federation 2 YAML configuration, Rover installs a separate plugin and prompts you to accept the terms and conditions of the ELv2 license.

To automatically accept this prompt (especially important for CI environments), add APOLLO_ELV2_LICENSE=accept to the beginning of the command.

Learn more about ELv2.

Rover outputs the following supergraph schema:

As you can see, this composed schema includes all of the types and fields from our , along with many additional that the router uses to route incoming operations.

Now, append --output supergraph.graphql to the above command to write the composed schema to a file:

rover supergraph compose --config ./supergraph-config.yaml --output supergraph.graphql

3. Provide the composed schema to the router

To provide a Rover-composed supergraph schema to our router, we pass it as a command-line option. Run the following in your router project directory:

./router --supergraph=supergraph.graphql

NOTE

For brevity, we're skipping setting the APOLLO_KEY environment variable here. Although it isn't required if you provide your schema with --supergraph, you do need to provide it to enable federated trace reporting.

This time, the router reads your static supergraph schema from a file. This does not communicate with GraphOS Studio, which means it's well suited to local development or CI environments where you don't want to introduce an external dependency.

Learn more about router configuration options.


Great job! We've seen how to compose our supergraph schema with both managed federation and the Rover CLI. Next, let's look at how to apply what we've learned to our own subgraphs. Go to part 4.

Previous
Composition in GraphOS Studio
Next
Working with Subgraphs
Rate articleRateEdit on GitHubEditForumsDiscord

© 2024 Apollo Graph Inc.

Privacy Policy

Company