GraphQL en C# (.NET): Guía completa de la biblioteca GraphQL.NET

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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


Para ASP.NET Core también necesitará el paquete para middleware:

dotnet add package GraphQL.Server.Transports.AspNetCore


Creació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:

Recommendations