GraphQL em C# (.NET): visão geral das bibliotecas e ferramentas
GraphQL é uma linguagem de consulta para APIs que permite aos clientes solicitar apenas os dados de que realmente precisam. No ecossistema C# (.NET), existem várias bibliotecas poderosas para implementar servidores e clientes GraphQL. Neste artigo, veremos as duas mais populares: Hot Chocolate e GraphQL.NET. Ambas as bibliotecas são ativamente desenvolvidas, possuem código aberto e excelente documentação.
1. Hot Chocolate — framework moderno da ChilliCream
Hot Chocolate é um framework GraphQL completo para .NET que suporta tanto a parte do servidor quanto a do cliente. Ele se integra com ASP.NET Core e Entity Framework Core, oferecendo atributos convenientes e geração automática de esquemas.
Instalação e servidor básico
Para começar, instale o pacote via NuGet:
dotnet add package HotChocolate.AspNetCoreCrie um servidor GraphQL simples:
// Define o tipo de dadospublic class Book{ public string Id { get; set; } public string Title { get; set; } public string Author { get; set; }}
// Cria a classe Querypublic class Query{ public Book GetBook() => new Book { Id = "1", Title = "Guerra e Paz", Author = "Liev Tolstói" };}
// Configura no Program.csvar builder = WebApplication.CreateBuilder(args);builder.Services .AddGraphQLServer() .AddQueryType<Query>();
var app = builder.Build();app.MapGraphQL();app.Run();Após a execução, o servidor estará disponível em /graphql. Você pode enviar uma consulta através de qualquer cliente GraphQL:
{ book { title author }}Hot Chocolate suporta mutações, subscrições, filtragem, ordenação, paginação e integração com Entity Framework através de UseProjection, UseFiltering e UseSorting.
Exemplo com mutação
public class Mutation{ public Book AddBook(string title, string author) => new Book { Id = Guid.NewGuid().ToString(), Title = title, Author = author };}
// Registrobuilder.Services .AddGraphQLServer() .AddQueryType<Query>() .AddMutationType<Mutation>();2. GraphQL.NET — biblioteca leve e testada pelo tempo
GraphQL.NET (também conhecida como graphql-dotnet) é uma adaptação da implementação original em JavaScript do GraphQL para C#. Ela oferece construção manual de esquemas através de tipos e campos, dando controle total sobre a estrutura da API.
Instalação e exemplo
dotnet add package GraphQLdotnet add package GraphQL.SystemTextJsondotnet add package GraphQL.Server.Transports.AspNetCoreCriaremos um servidor simples:
// Define o tipopublic class BookType : ObjectGraphType<Book>{ public BookType() { Field(x => x.Id); Field(x => x.Title); Field(x => x.Author); }}
// Cria o esquemapublic class AppSchema : Schema{ public AppSchema(IServiceProvider provider) : base(provider) { Query = provider.GetRequiredService<BookQuery>(); }}
// Querypublic class BookQuery : ObjectGraphType{ public BookQuery() { Field<BookType>("book") .Resolve(context => new Book { Id = "1", Title = "Crime e Castigo", Author = "Fiódor Dostoiévski" }); }}
// Configuração Program.csvar builder = WebApplication.CreateBuilder(args);builder.Services.AddSingleton<BookQuery>();builder.Services.AddSingleton<AppSchema>();builder.Services.AddGraphQL(b => b.AddSystemTextJson());
var app = builder.Build();\