GraphQL em C# (.NET): bibliotecas Hot Chocolate e GraphQL.NET para criação de APIs

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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.AspNetCore


Crie 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.AspNetCore


Criaremos 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();\

Recommendations