Biblioteca GraphQL para C# (.NET) — GraphQL.NET
GraphQL es un lenguaje de consulta para APIs que permite a los clientes solicitar únicamente los datos que realmente necesitan. En el ecosistema .NET, una de las implementaciones más populares es la biblioteca GraphQL.NET (también conocida como graphql-dotnet). Proporciona herramientas potentes para crear APIs flexibles, tipadas y eficientes en la plataforma C# (.NET).
En este artículo, analizaremos en detalle cómo usar GraphQL.NET, exploraremos los conceptos clave y proporcionaremos ejemplos prácticos de código.
¿Qué es GraphQL.NET?
GraphQL.NET es una biblioteca de código abierto que implementa la especificación de GraphQL para la plataforma .NET. Es compatible tanto con .NET Core como con .NET Framework. Las principales características incluyen:
- Creación de esquemas fuertemente tipados en C#.
- Soporte para consultas (Query), mutaciones (Mutation) y suscripciones (Subscription).
- Validación y ejecución de consultas integradas.
- Integración con frameworks web populares (ASP.NET Core, Nancy y otros).
- Soporte para suscripciones a través de WebSockets (SignalR).
Instalación y configuración
Para comenzar, instale el paquete a través de NuGet:
dotnet add package GraphQLdotnet add package GraphQL.SystemTextJson // para serialización JSONSi utiliza ASP.NET Core, instale adicionalmente:
dotnet add package GraphQL.Server.Transports.AspNetCoredotnet add package GraphQL.Server.Ui.Playground // interfaz de usuario integrada para pruebasCreación del primer esquema
GraphQL se construye alrededor de un esquema que define los tipos de datos y las operaciones disponibles. Veamos un ejemplo simple: una API para obtener información sobre libros.
Paso 1. Defina el modelo de datos:
public class Book{ public string Id { get; set; } public string Title { get; set; } public string Author { get; set; } public int Pages { get; set; }}Paso 2. Cree los tipos GraphQL:
public class BookType : ObjectGraphType<Book>{ public BookType() { Field(x => x.Id).Description("Identificador del libro"); Field(x => x.Title).Description("Título del libro"); Field(x => x.Author).Description("Autor"); Field(x => x.Pages).Description("Número de páginas"); }}Paso 3. Defina la consulta raíz (Query):
public class BookQuery : ObjectGraphType{ public BookQuery(IDataStore dataStore) { Field<BookType>("book") .Arguments(new QueryArguments(new QueryArgument<StringGraphType> { Name = "id" })) .Resolve(context => dataStore.GetBookById(context.GetArgument<string>("id")));
Field<ListGraphType<BookType>>("books") .Resolve(context => dataStore.GetAllBooks()); }}Paso 4. Compile el esquema:
public class BookSchema : Schema{ public BookSchema(IServiceProvider provider) : base(provider) { Query = provider.GetRequiredService<BookQuery>(); }}Integración con ASP.NET Core
Registre los servicios en Program.cs (o Startup.cs):
builder.Services.AddGraphQL(b => b .AddSystemTextJson() .AddSchema<BookSchema>() .AddGraphTypes(typeof(BookType).Assembly));
builder.Services.AddScoped<IDataStore, InMemoryDataStore>();Agregue el middleware:
app.UseGraphQL<BookSchema>(); // endpoint por defecto /graphqlapp.UseGraphQLPlayground(); // interfaz de usuario para pruebas (opcional)Ejecución de una consulta
Ahora puede
También en la biblioteca
Métricas de Prometheus en Swift: integración para aplicaciones iOS/macOS
Byte Buddy en Java: guía completa con ejemplos prácticos
Event Bus y el patrón Observer en JavaScript (Node.js) — creación de sistemas de eventos flexibles
Regex en Rust: guía completa con ejemplos prácticos