GraphQL em C# (.NET): Guia Completo da Biblioteca GraphQL.NET

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

Biblioteca GraphQL para C# (.NET): GraphQL.NET



GraphQL é uma linguagem de consulta moderna para APIs que permite aos clientes solicitar apenas os dados necessários, reduzindo a redundância e acelerando o funcionamento das aplicações. Para a plataforma .NET, existe a poderosa biblioteca GraphQL.NET, que permite aos desenvolvedores em C# criar back-ends totalmente compatíveis com a especificação GraphQL. Neste artigo, vamos detalhar seus recursos, vantagens e apresentar exemplos práticos.



O que é GraphQL.NET?



GraphQL.NET é uma biblioteca open-source para C# (.NET) que implementa a especificação GraphQL. Ela fornece ferramentas para definir esquemas (tipos, consultas, mutações e subscrições), processar requisições recebidas, validar e executar a lógica. A biblioteca é ativamente mantida pela comunidade e usada em ambientes de produção.



Principais características:

  • Definição flexível de esquemas — tipos, interfaces, tipos union e enumerações.
  • Suporte a consultas (Query), mutações (Mutation) e subscrições (Subscription).
  • Integração com contêineres DI (ex.: Microsoft.Extensions.DependencyInjection).
  • Validação e análise de consultas no lado do servidor.
  • Suporte a DataLoader para otimização de consultas N+1.
  • Ferramentas para teste e depuração.


Instalação e configuração



A instalação é feita através do NuGet Package Manager. Execute o comando:

dotnet add package GraphQLdotnet add package GraphQL.SystemTextJson


Para ASP.NET Core, também será necessário o pacote para middleware:

dotnet add package GraphQL.Server.Transports.AspNetCore


Criando uma API GraphQL simples



1. Definição dos tipos de dados



Primeiro, vamos criar um modelo de dados e o tipo GraphQL correspondente:

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. Definição das consultas (Query)



Agora, vamos criar a classe Query que processará as consultas:

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


Em seguida, registramos esta classe no esquema:

public class BookSchema : Schema{    public BookSchema(IServiceProvider provider) : base(provider)    {        Query = provider.GetRequiredService<Query>();    }}


3. Configuração no Startup.cs



Adicionamos os serviços e middleware no 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(); // Para testes}


Mutações (Mutation) para alterar dados



Vamos adicionar a possibilidade de incluir livros através de mutações:

Recommendations