3. 一个 Hot Chocolate 子图
5m

概述

我们已经有一个用于我们 的起点:一个 Hot Chocolate ,它包含有关播放列表和轨道的 信息。

在本课中,我们将

  • 在 Hot Chocolate 中启用

Hot Chocolate 中的 Apollo 联合

我们将使用 Hot Chocolate 的 集成,该集成已包含在项目中。

Odyssey.MusicMatcher.csproj
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="HotChocolate.ApolloFederation" Version="13.9.7" />
<PackageReference Include="HotChocolate.AspNetCore" Version="13.9.7" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
</Project>

然后,我们将在我们的 中启用它。

打开Program.cs,找到 初始化的代码行。我们将链接 .AddApolloFederation() 方法。

Program.cs
builder.Services
.AddGraphQLServer()
.AddApolloFederation()

让我们保存更改并重新启动服务器。

探索时间!

Explorer 是一个强大的 Web IDE,用于创建、运行和管理 。它允许我们轻松快速地构建操作,查看操作历史记录,查看响应提示以及与他人共享操作。我们可以通过 访问 Explorer,这是一个帮助进行本地图开发的环境。

注意:有关如何使用 Sandbox Explorer 的复习,请查看 第 5 课:Apollo Sandbox ExplorerGraphQL 简介 课程中。

切换到浏览器并前往 ,地址为 https://studio.apollographql.com/sandbox

通过在页面左上角粘贴 https://127.0.0.1:5059/graphql ,确保您已连接到服务器的端点。

Query 类型下,我们可以看到两个我们没有专门添加到模式中的 _service_entities 。这两个 现在是一个 子图 的信号。

https://studio.apollographql.com/sandbox/explorer

Explorer showing two new fields added for subgraph

生成模式文件

在我们将此 纳入 之前还有一件事要做。我们需要访问子图的 模式 文件。

如果我们遵循了 Hot Chocolate 的 schema-first 方法,那么我们已经拥有一个模式文件!但是,由于我们使用了 annotation-based 方法,我们需要做一些额外的步骤。

注意:您可以在 第 3 课:Hot Chocolate 中详细了解 Hot Chocolate 支持的三种不同方法(基于注释、代码优先和模式优先)。GraphQL 简介 课程。

为了生成模式文件,Hot Chocolate 提供了一个方便的包来帮助我们。让我们安装它。

dotnet add package HotChocolate.AspNetCore.CommandLine --version 13.9.7

注意具体的版本号。由于我们使用的是 Hot Chocolate v13.9.7,因此此附加包需要与之匹配。

接下来,转到 Program.cs 文件,找到我们运行应用程序的代码行。我们将用 RunWithGraphQLCommands(args); 方法替换它。

Program.cs
- app.Run();
+ app.RunWithGraphQLCommands(args);

有了这些,我们可以在终端中运行以下命令来生成模式

dotnet run -- schema export --output schema.graphql

注意: 双破折号和 schema 之间有一个空格。双破折号和 output 之间 没有 空格。

我们可以在 schema.graphql 文件中找到生成的模式。它应该从顶部的联合定义开始,让我们知道这是一个 子图 模式。

schema.graphql
schema
@link(
url: "https://specs.apollo.dev/federation/v2.5"
import: ["@key", "FieldSet"]
) {
query: Query
mutation: Mutation
}

它还导入了特定于联合的 ,例如 @key 。看一下文件的其余部分,我们可以看到与播放列表和轨道相关的类型和

练习

这些自动生成的字段中的哪一个表明 GraphQL 服务器现在是一个有效的子图服务器?

关键要点

  • 我们使用 HotChocolate.ApolloFederation 包来启用 功能。
  • 两个特殊的 _service_entities,表明该 现在是一个

下一步

我们的 已准备就绪,我们可以继续执行 过程的下一步:将模式发布到

上一步

分享您对此课程的疑问和评论

本课程目前处于

测试版
.您的反馈有助于我们改进!如果您遇到困难或感到困惑,请告诉我们,我们会为您提供帮助。所有评论都是公开的,必须遵守 Apollo 行为准则。请注意,已解决或已解决的评论可能会被删除。

您需要一个 GitHub 帐户才能在下方发布。还没有帐户吗? 请改在 Odyssey 论坛上发帖。