C# (.NET)的GraphQL库:GraphQL.NET
GraphQL是一种现代的API查询语言,它允许客户端仅请求所需的数据,从而减少冗余并加快应用程序运行速度。对于.NET平台,有一个强大的GraphQL.NET库,它使C#开发者能够创建完全兼容GraphQL规范的服务器端。本文将详细介绍其功能、优势,并提供实际示例。
什么是GraphQL.NET?
GraphQL.NET是一个用于C# (.NET)的开源库,实现了GraphQL规范。它提供了定义模式(类型、查询、变更和订阅)、处理传入请求、验证和执行逻辑的工具。该库由社区积极维护,并已用于生产环境。
主要特点:
- 灵活的模式定义 — 类型、接口、联合类型和枚举。
- 支持查询(Query)、变更(Mutation)和订阅(Subscription)。
- 与DI容器集成(例如Microsoft.Extensions.DependencyInjection)。
- 服务器端请求验证和解析。
- 支持DataLoader以优化N+1查询问题。
- 测试和调试工具。
安装与配置
通过NuGet包管理器进行安装。执行以下命令:
dotnet add package GraphQLdotnet add package GraphQL.SystemTextJson对于ASP.NET Core,还需要中间件包:
dotnet add package GraphQL.Server.Transports.AspNetCore创建简单的GraphQL API
1. 定义数据类型
首先创建数据模型和对应的GraphQL类型:
public class Book{ public int Id { get; set; } public string Title { get; set; } public string Author { get; set; }}
public class BookType : ObjectType<Book>{ protected override void Configure(IObjectTypeDescriptor<Book> descriptor) { descriptor.Field(b => b.Id).Type<NonNullType<IntType>>(); descriptor.Field(b => b.Title).Type<NonNullType<StringType>>(); descriptor.Field(b => b.Author).Type<StringType>(); }}2. 定义查询(Query)
现在创建处理查询的Query类:
public class Query{ private readonly List<Book> _books = new() { new Book { Id = 1, Title = "1984", Author = "George Orwell" }, new Book { Id = 2, Title = "Brave New World", Author = "Aldous Huxley" } };
public Book GetBook(int id) { return _books.FirstOrDefault(b => b.Id == id); }
public List<Book> GetBooks() { return _books; }}然后将此类注册到模式中:
public class BookSchema : Schema{ public BookSchema(IServiceProvider provider) : base(provider) { Query = provider.GetRequiredService<Query>(); }}3. 在Startup.cs中配置
在ASP.NET Core中添加服务和中间件:
public void ConfigureServices(IServiceCollection services){ services.AddGraphQL(builder => builder .AddSchema<BookSchema>() .AddSystemTextJson());}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){ app.UseGraphQL<BookSchema>(); app.UseGraphQLPlayground(); // 用于测试}用于修改数据的变更(Mutation)
通过变更添加添加书籍的功能: