Biblioteca GraphQL para C# (.NET): GraphQL.NET
GraphQL es un lenguaje de consulta moderno para API que permite a los clientes solicitar solo los datos necesarios, reduciendo la redundancia y acelerando el funcionamiento de las aplicaciones. Para la plataforma .NET existe la potente biblioteca GraphQL.NET, que permite a los desarrolladores en C# crear partes de servidor totalmente compatibles con la especificación GraphQL. En este artículo, analizaremos en detalle sus capacidades, ventajas y proporcionaremos ejemplos prácticos.
¿Qué es GraphQL.NET?
GraphQL.NET es una biblioteca de código abierto para C# (.NET) que implementa la especificación GraphQL. Proporciona herramientas para definir esquemas (tipos, consultas, mutaciones y suscripciones), procesar solicitudes entrantes, validar y ejecutar la lógica. La biblioteca cuenta con un sólido respaldo de la comunidad y se utiliza en entornos de producción.
Características clave:
- Definición flexible de esquemas: tipos, interfaces, tipos unión y enumeraciones.
- Soporte para consultas (Query), mutaciones (Mutation) y suscripciones (Subscription).
- Integración con contenedores DI (por ejemplo, Microsoft.Extensions.DependencyInjection).
- Validación y análisis de consultas en el lado del servidor.
- Soporte para DataLoader para optimizar consultas N+1.
- Herramientas para pruebas y depuración.
Instalación y configuración
La instalación se realiza a través del Administrador de paquetes NuGet. Ejecute el comando:
dotnet add package GraphQLdotnet add package GraphQL.SystemTextJsonPara ASP.NET Core también necesitará el paquete para middleware:
dotnet add package GraphQL.Server.Transports.AspNetCoreCreación de una API GraphQL simple
1. Definición de tipos de datos
Primero, crearemos un modelo de datos y el tipo GraphQL correspondiente:
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. Definición de consultas (Query)
Ahora crearemos la clase Query que manejará las 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; }}Luego, registramos esta clase en el esquema:
public class BookSchema : Schema{ public BookSchema(IServiceProvider provider) : base(provider) { Query = provider.GetRequiredService<Query>(); }}3. Configuración en Startup.cs
Agregamos los servicios y middleware en 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 pruebas}Mutaciones (Mutation) para modificar datos
Agreguemos la posibilidad de añadir libros mediante mutaciones:
También en la biblioteca
Sharp para JavaScript (Node.js): guía completa con ejemplos
Trabajo con fechas en Kotlin: bibliotecas y herramientas (Kotlinx-datetime, Joda-Time, java.time)
Pruebas en PHP: resumen de frameworks y herramientas (PHPUnit, Pest, Codeception)
Guía completa de Symfony/EventDispatcher para PHP con ejemplos