使用 C# 的 GraphQL API:面向初学者的分步教程

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

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    }  }}

博客

书籍推荐