GraphQL 与 C# 简介
GraphQL 是一种由 Facebook 开发的 API 查询语言,它允许客户端仅请求所需的数据。与端点固定的 REST 不同,GraphQL 能够灵活地构建服务器响应。在本教程中,我们将使用 Hot Chocolate 库(.NET 中最流行的解决方案)在 C# 中创建一个完整的 GraphQL API。
我们将从安装开始,逐步实现查询、变更和订阅。到文章结束时,您将能够独立部署 C# GraphQL 服务器并将其集成到您的项目中。
1. 项目安装与配置
首先,创建一个新的 ASP.NET Core 项目。请确保您已安装 .NET SDK(版本 6.0 或更高)。打开终端或命令行并执行:
dotnet new web -n GraphQLDemocd GraphQLDemo现在安装 Hot Chocolate 包:
dotnet add package HotChocolate.AspNetCoredotnet add package HotChocolate.AspNetCore.Playground安装完成后,打开 Program.cs 文件并配置服务器:
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();
// 添加用于测试的 Playgroundapp.UsePlayground();
app.Run();现在在单独的文件 Query.cs 中创建一个简单的 Query 类:
public class Query{ public string Hello() => "你好,GraphQL 世界!";}使用命令 dotnet run 启动项目,然后在浏览器中打开 http://localhost:5000/graphql。您将看到 Playground 界面,可以在其中执行查询:
{ hello}响应:{ "data": { "hello": "你好,GraphQL 世界!" } }
2. 创建类型和查询
GraphQL 是强类型的。在 C# 中,我们使用类来定义类型。创建 Book 和 Author 模型:
public class Book{ public int Id { get; set; } public string Title { get; set; } public Author Author { get; set; }}
public class Author{ public int Id { get; set; } public string Name { get; set; } public List<Book> Books { get; set; }}现在添加数据存储(在实际项目中使用数据库)并扩展 Query 类:
public class Query{ private static List<Author> _authors = new() { new Author { Id = 1, Name = "列夫·托尔斯泰", Books = new List<Book> { new Book { Id = 1, Title = "战争与和平", Author = null }, new Book { Id = 2, Title = "安娜·卡列尼娜", Author = null } } }, new Author { Id = 2, Name = "费奥多尔·陀思妥耶夫斯基", Books = new List<Book> { new Book { Id = 3, Title = "罪与罚", Author = null } } } };
public List<Author> GetAuthors() => _authors;
public Author GetAuthor(int id) => _authors.FirstOrDefault(a => a.Id == id); public List<Book> GetBooks() => _authors.SelectMany(a => a.Books).ToList();}请注意:我们没有显式配置类型——Hot Chocolate 会根据 C# 类自动生成模式。现在可以执行查询:
{ authors { id name books { title } }}博客
书籍推荐
推荐阅读