GraphQL 和 C# 简介
GraphQL 是一种 API 查询语言,它允许客户端只请求他们真正需要的数据。与响应结构固定的 REST 不同,GraphQL 可以灵活地构建查询并精确获取所需内容。在本教程中,我们将学习如何使用 Hot Chocolate 库在 C# (.NET) 平台上创建一个完整的 GraphQL API。
无论您是初学者还是有经验的开发者,只要想掌握构建 API 的现代方法,本文都会对您有所帮助。我们将涵盖所有步骤:从项目设置到实现查询和变更。文章结束时,您将拥有一个可运行的 GraphQL 服务器,随时可以与任何客户端集成。
项目安装与配置
首先,我们需要创建一个新的 ASP.NET Core 项目。打开终端或命令行并执行以下命令:
dotnet new web -n GraphQLDemocd GraphQLDemo现在,添加 Hot Chocolate 包——这是在 .NET 中使用 GraphQL 的主要库:
dotnet add package HotChocolate.AspNetCore安装完成后,打开 Program.cs 文件并配置服务。以下是启动 GraphQL 的最小配置:
using Microsoft.AspNetCore.Builder;using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// 添加 GraphQL 服务builder.Services .AddGraphQLServer() .AddQueryType<Query>();
var app = builder.Build();
// 连接 GraphQL 中间件app.MapGraphQL();
app.Run();请注意:我们还没有创建 Query 类。这是我们的根类型,它定义了可用的查询。我们将在下一节中创建它。
定义模式:类型和解析器
创建数据模型
首先,定义一个简单的数据模型。就以一本书为例:
public class Book{ public string Id { get; set; } public string Title { get; set; } public string Author { get; set; } public int Year { get; set; }}创建 Query 类
现在,创建 Query 类,它将返回数据。在 Hot Chocolate 中,解析器是普通的方法,可以是同步的或异步的:
public class Query{ private static readonly List<Book> Books = new() { new Book { Id = "1", Title = "战争与和平", Author = "列夫·托尔斯泰", Year = 1869 }, new Book { Id = "2", Title = "罪与罚", Author = "费奥多尔·陀思妥耶夫斯基", Year = 1866 } };
public IQueryable<Book> GetBooks() => Books.AsQueryable();
public Book? GetBook(string id) => Books.FirstOrDefault(b => b.Id == id);}GetBooks 方法返回所有书籍的列表,而 GetBook 根据标识符返回单本书。Hot Chocolate 会自动将这些方法转换为 GraphQL 模式的字段。
类型配置(可选)
有时需要明确指定哪些字段应该可用。为此,可以使用属性或 Fluent API。以下是使用属性的示例:
public class Book{ [GraphQLName("id")] public string Id { get; set; }
[GraphQLNonNullType] public string Title { get; set; }
public string Author { get; set; } public int Year { get; set; }}现在,使用命令 dotnet run 启动项目,并在浏览器中导航到 http://localhost:5000/graphql。您将看到内置的 Banana Cake Pop——一个用于测试查询的环境。
实现变更(创建、更新、删除)
GraphQL 中的变更用于修改数据。创建一个 Mutation 类,并添加用于操作书籍的方法。