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.SystemTextJsonPara ASP.NET Core, também será necessário o pacote para middleware:
dotnet add package GraphQL.Server.Transports.AspNetCoreCriando 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:
Também na biblioteca
Frameworks CLI para Go (Golang): visão geral completa e comparação
React para JavaScript (Node.js): guia completo com exemplos
Rate Limiting em JavaScript (Node.js): Guia Completo da Biblioteca express-rate-limit
ent para Go: guia completo com exemplos práticos