Docs
Launch GraphOS Studio

Federation quickstart

Part 3 - Local composition


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

1. Provide subgraph details

Like Apollo Studio, the needs the following information about each of our to compose them:

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

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

In your 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 to the 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 's schema as a local file path, or as a registered that can fetch from Apollo (for details, see the Rover docs).

2. Perform composition

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

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

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

⚠️ Important: The first time you run this command with a Federation 2 YAML configuration, 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.

outputs the following :

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

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 -composed to our , we pass it as a command-line option. Run the following in your router project directory:

./router --supergraph=supergraph.graphql

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

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


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

Previous
Composition in Apollo Studio
Next
Working with subgraphs
Edit on GitHubEditForumsDiscord

© 2024 Apollo Graph Inc.

Privacy Policy

Company