0Pricing
GraphQL APIs with Spring Boot · 课时

网关设置与管理

配置并部署 Apollo Gateway,将联邦子图组合并公开为单一统一的图。

网关设置与管理 是 CoddyKit 上的免费 GraphQL APIs with Spring Boot 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 GraphQL APIs with Spring Boot 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 GraphQL APIs with Spring Boot 课程共包含 4 节课。

本课时的部分内容尚未翻译,以英文显示。

Gateway: The Unified API

In GraphQL Federation, the Apollo Gateway acts as the central entry point for all client applications. Think of it as the brain that understands your entire supergraph.

It takes multiple independent GraphQL services (called subgraphs) and combines their schemas into one unified, client-facing schema.

Why a Gateway is Essential

With a microservices architecture, you might have many backend services, each with its own GraphQL API. Without a gateway, clients would need to know about and query each service individually.

  • Unified Endpoint: Clients interact with a single GraphQL API.
  • Schema Composition: The gateway automatically stitches together the schemas from all subgraphs.
  • Simplified Client Logic: Clients don't need to know which service owns which data.

How the Gateway Works

When a client sends a query to the gateway, here's what happens:

  1. The gateway receives the query.
  2. It analyzes the query against the composed supergraph schema.
  3. It breaks down the query into smaller parts, determining which subgraph owns which piece of data.
  4. It sends sub-queries to the relevant subgraphs.
  5. It then combines the results from these subgraphs into a single response for the client.

Gateway Implementations

While your subgraphs can be built with Spring Boot (or any other framework), the gateway itself is often implemented using Apollo's own tools.

The most common and robust implementation is the Apollo Server Gateway, which is a Node.js-based server designed specifically for federation. This lesson will focus on setting up this standard gateway.

Basic Gateway Setup (Node.js)

Let's set up a minimal Apollo Gateway. First, create a new Node.js project and install the necessary packages:

npm init -y
npm install @apollo/gateway apollo-server

Then, create an index.js file:

const { ApolloGateway, RemoteGraphQLDataSource } = require("@apollo/gateway");
const { ApolloServer } = require("apollo-server");

const gateway = new ApolloGateway({
  serviceList: [
    { name: "products", url: "http://localhost:4001/graphql" },
  ],
  buildService({ name, url }) {
    return new RemoteGraphQLDataSource({ url });
  },
});

const server = new ApolloServer({ gateway });

server.listen({
  port: process.env.PORT || 4000
}).then(({ url }) => {
  console.log(`🚀 Gateway ready at ${url}`);
});

Configuring Subgraphs

In the previous code, the serviceList array is crucial. It tells the gateway which subgraphs exist and where to find them. Each object in the array needs two properties:

  • name: A unique identifier for the subgraph (e.g., "products").
  • url: The endpoint where the subgraph's GraphQL API is running (e.g., "http://localhost:4001/graphql").

Adding More Subgraphs

As you develop more microservices with GraphQL APIs, you simply add them to the serviceList. The gateway will automatically compose their schemas into the unified graph.

Here's how you'd add a reviews subgraph running on port 4002:

const { ApolloGateway, RemoteGraphQLDataSource } = require("@apollo/gateway");
const { ApolloServer } = require("apollo-server");

const gateway = new ApolloGateway({
  serviceList: [
    { name: "products", url: "http://localhost:4001/graphql" },
    { name: "reviews", url: "http://localhost:4002/graphql" },
  ],
  buildService({ name, url }) {
    return new RemoteGraphQLDataSource({ url });
  },
});

const server = new ApolloServer({ gateway });

server.listen({
  port: process.env.PORT || 4000
}).then(({ url }) => {
  console.log(`🚀 Gateway ready at ${url}`);
});

Running and Accessing the Gateway

Once your index.js is set up, you can start the gateway:

node index.js

The console will output the URL where your gateway is running, typically http://localhost:4000/. Open this URL in your browser to access the GraphQL Playground or GraphiQL interface provided by Apollo Server.

Querying the Unified Graph

Clients will send their GraphQL queries directly to the gateway's URL. The gateway handles all the internal routing and data fetching from the subgraphs.

For example, a query combining data from both a products and reviews subgraph might look like this:

query GetProductDetails {
  product(id: "prod-1") {
    name
    price
    reviews {
      id
      rating
      comment
    }
  }
}

Gateway Management Tips

Beyond initial setup, managing your gateway involves several best practices:

  • Deployment: Deploy the gateway as a standalone service, often alongside your subgraphs.
  • Monitoring: Use tools to monitor its performance, error rates, and latency.
  • Scaling: The gateway can be scaled horizontally to handle increased client traffic.
  • Schema Changes: Ensure your gateway is configured to pick up schema updates from subgraphs reliably (e.g., via Apollo Studio or a local schema registry).

Quick Check: Gateway Role

You've learned about the Apollo Gateway and its role in federation.

Recap: Gateway Essentials

Congratulations! You've learned about the Apollo Gateway, a crucial component in GraphQL Federation. It provides a unified API endpoint for clients, seamlessly composing schemas from various subgraphs and routing queries effectively.

By configuring the serviceList, your gateway becomes the single source of truth for your entire supergraph, simplifying client interactions and enabling a robust microservices architecture.

常见问题解答

「网关设置与管理」课时是免费的吗?

是的 — 「网关设置与管理」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 GraphQL APIs with Spring Boot 课程的其余内容,请升级到 CoddyKit PRO。 GraphQL APIs with Spring Boot 课程共包含 4 节课。

「网关设置与管理」这节课中我会学到什么?

配置并部署 Apollo Gateway,将联邦子图组合并公开为单一统一的图。 你通过在浏览器中直接运行的动手代码来练习 GraphQL APIs with Spring Boot,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 GraphQL APIs with Spring Boot 需要有经验吗?

无需任何先前经验。CoddyKit 上的 GraphQL APIs with Spring Boot 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「网关设置与管理」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 GraphQL APIs with Spring Boot 课中编写并运行代码吗?

能。每节 GraphQL APIs with Spring Boot 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Apollo Federation 入门
  2. 构建联邦子图
  3. 网关设置与管理
  4. 实体引用与 @key 指令
← 返回 GraphQL APIs with Spring Boot