3. 热巧克力
5m

概述

我们对如何 工作有了更好的理解,现在该实施了!

在本课中,我们将

  • 探索热巧克力 框架
  • 安装并设置热巧克力服务器

热巧克力,一个 .NET GraphQL 框架

本身是一个规范,一个 语言,用于 API。要在服务器中实现 GraphQL,通常使用 GraphQL 框架。

例如,如果您是 JavaScript/TypeScript 开发人员,您可能会使用Apollo Server

在 .NET 生态系统中,我们可以使用 热巧克力,一个 框架,由 ChilliCream 开发和维护。以下是他们在文档中介绍自己的方式 in their docs:

热巧克力是一个开源 ,适用于 Microsoft .NET 平台,符合最新的 GraphQL 2021 年 10 月规范 + 草案,这使得热巧克力与所有符合 GraphQL 的客户端(如 Strawberry Shake、Relay、 和各种其他 和工具兼容。

设置热巧克力

从您的项目目录中,打开一个新的终端。让我们安装热巧克力包。

dotnet add package HotChocolate.AspNetCore --version 13.8.1

注意:我们选择在这里包含特定的版本号(这是课程发布时的最新版本),以确保项目与课程说明一致。

接下来,打开 Program.cs 文件,位于 repo 的根目录中。目前,它被设置为从服务器运行的根目录返回一个简单的 "Hello World!" 消息(默认情况下为 https://127.0.0.1:5059)。

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();

在实例化 builder(第 1 行)和实例化 app(第 2 行)之间,让我们将热巧克力 添加到我们的 Web 应用程序的服务中。

builder.Services.AddGraphQLServer();

然后我们将替换 MapGet 函数为 MapGraphQL()

app.MapGraphQL();

此函数将一个 端点添加到端点配置中,这意味着我们的 将在 /graphql 中可用。

使用热巧克力构建

热巧克力提供三种不同的方法来实现 :基于注解的、代码优先的和架构优先的。

架构优先 方法中,我们使用 )编写 。然后,我们需要编写 函数来填充架构中的每个

在基于注解的方法和代码优先的方法中,我们只编写 。架构是在后台自动生成的。C# 和 使得这成为可能:C# 类型映射到 类型,因此我们不需要学习或记住 语法的细节。

代码优先 方法需要编写明确的代码来定义和连接 所需的一切,例如 名、字段类型、、描述等。

基于注解的 方法使用 C# 属性,它就像代码的标签一样。 Attributes 被包含在方括号中,可以接收 。以下是一个使用内置 ObsoleteAttribute 的示例:

来自 Microsoft .NET 文档的示例
[Obsolete("ThisClass is obsolete. Use ThisClass2 instead.")]
public class ThisClass {}

热巧克力附带了我们可以在 开发中使用的属性。这些属性就像我们要使用代码优先方法需要编写的代码的快捷方式。

您可以在同一个项目中混合使用这些方法。在幕后,热巧克力会将架构优先方法和基于注解的方法都转换为代码优先方法。

在本课程中,我们将使用基于注解的方法。如果您刚开始使用 ,则无需担心学习 语法;我们将坚持使用熟悉的 C# 类型,并让热巧克力为我们完成生成架构的工作。注解也意味着我们可以减少样板代码!

想要使用其他方法吗?该 Hot Chocolate documentation 提供了每种方法的代码片段。在下一课中,我们将提供 Hello World 示例使用架构优先方法和代码优先方法可能的样子,但我们将坚持使用基于注解的方法,在本课程的其余部分中。

练习

MapGraphQL() 函数的作用是什么?

主要收获

  • Hot Chocolate 是一个开源的 ,适用于 Microsoft .NET 平台。
  • Hot Chocolate 提供三种开发方法:schema-first、code-first 和基于注解的方法。
  • 在 code-first 和基于注解的方法中,Hot Chocolate 将 C# 类型映射到 类型,减少了学习 GraphQL () 语法的必要性。

下一步

我们的 处于待命状态,等待一个 schema。 我们将在下一课中提供它想要的内容!

上一页

分享您关于本课程的问题和意见

本课程目前处于

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

您需要一个 GitHub 帐户才能在下面发布。没有帐户吗? 在我们的 Odyssey 论坛中发布。