概述
我们已经有一个用于我们子图 的起点:一个 Hot Chocolate GraphQL 服务器 ,它包含有关播放列表和轨道的 信息。
在本课中,我们将
- 在 Hot Chocolate GraphQL 服务器 中启用 Apollo 联合
Hot Chocolate 中的 Apollo 联合
我们将使用 Hot Chocolate 的 Apollo 联合 集成,该集成已包含在项目中。
<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>
然后,我们将在我们的 GraphQL 服务器 中启用它。
打开Program.cs
,找到 GraphQL 服务器 初始化的代码行。我们将链接 .AddApolloFederation()
方法。
builder.Services.AddGraphQLServer().AddApolloFederation()
让我们保存更改并重新启动服务器。
探索时间!
Explorer 是一个强大的 Web IDE,用于创建、运行和管理 GraphQL 操作 。它允许我们轻松快速地构建操作,查看操作历史记录,查看响应提示以及与他人共享操作。我们可以通过 Apollo Sandbox 访问 Explorer,这是一个帮助进行本地图开发的环境。
注意:有关如何使用 Sandbox Explorer 的复习,请查看 第 5 课:Apollo Sandbox Explorer 在 GraphQL 简介 课程中。
切换到浏览器并前往 Apollo Sandbox ,地址为 https://studio.apollographql.com/sandbox。
通过在页面左上角粘贴 https://127.0.0.1:5059/graphql
,确保您已连接到服务器的端点。
在 Query
类型下,我们可以看到两个我们没有专门添加到模式中的 新 字段 : _service
和 _entities
。这两个 字段 是 GraphQL 服务器 现在是一个 子图 的信号。
生成模式文件
在我们将此 子图 纳入 超级图 之前还有一件事要做。我们需要访问子图的 模式 文件。
如果我们遵循了 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);
方法替换它。
- app.Run();+ app.RunWithGraphQLCommands(args);
有了这些,我们可以在终端中运行以下命令来生成模式
dotnet run -- schema export --output schema.graphql
注意: 双破折号和 schema
之间有一个空格。双破折号和 output
之间 没有 空格。
我们可以在 schema.graphql
文件中找到生成的模式。它应该从顶部的联合定义开始,让我们知道这是一个 子图 模式。
schema@link(url: "https://specs.apollo.dev/federation/v2.5"import: ["@key", "FieldSet"]) {query: Querymutation: Mutation}
它还导入了特定于联合的 指令 ,例如 @key
。看一下文件的其余部分,我们可以看到与播放列表和轨道相关的类型和 字段 。
练习
关键要点
- 我们使用
HotChocolate.ApolloFederation
包来启用 Apollo Federation 功能。 - 两个特殊的 字段,
_service
和_entities
,表明该 GraphQL 服务器 现在是一个 子图。
下一步
我们的 子图 已准备就绪,我们可以继续执行 托管联合 过程的下一步:将模式发布到 GraphOS。
分享您对此课程的疑问和评论
本课程目前处于
您需要一个 GitHub 帐户才能在下方发布。还没有帐户吗? 请改在 Odyssey 论坛上发帖。