Introducción a GraphQL con C#
GraphQL es un lenguaje de consulta para API, desarrollado por Facebook, que permite a los clientes solicitar solo los datos que necesitan. A diferencia de REST, donde los endpoints son fijos, GraphQL permite formar respuestas del servidor de manera flexible. En este tutorial crearemos una API GraphQL completa en C# utilizando la biblioteca Hot Chocolate, la solución más popular para .NET.
Recorreremos el camino desde la instalación hasta la implementación de consultas, mutaciones y suscripciones. Al final del artículo, podrá implementar de forma independiente un servidor GraphQL en C# e integrarlo en sus proyectos.
1. Instalación y configuración del proyecto
Para comenzar, crearemos un nuevo proyecto ASP.NET Core. Asegúrese de tener instalado el SDK de .NET (versión 6.0 o superior). Abra la terminal o línea de comandos y ejecute:
dotnet new web -n GraphQLDemocd GraphQLDemoAhora instale el paquete Hot Chocolate:
dotnet add package HotChocolate.AspNetCoredotnet add package HotChocolate.AspNetCore.PlaygroundDespués de la instalación, abra el archivo Program.cs y configure el servidor:
using Microsoft.AspNetCore.Builder;using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// Agregamos servicios GraphQLbuilder.Services .AddGraphQLServer() .AddQueryType<Query>();
var app = builder.Build();
// Conectamos el middleware GraphQLapp.MapGraphQL();
// Agregamos Playground para pruebasapp.UsePlayground();
app.Run();Ahora crearemos una clase simple Query en un archivo separado Query.cs:
public class Query{ public string Hello() => "¡Hola, mundo GraphQL!";}Ejecute el proyecto con el comando dotnet run y abra el navegador en http://localhost:5000/graphql. Verá la interfaz de Playground, donde puede ejecutar una consulta:
{ hello}Respuesta: { "data": { "hello": "¡Hola, mundo GraphQL!" } }
2. Creación de tipos y consultas
GraphQL está fuertemente tipado. En C# usamos clases para definir tipos. Crearemos los modelos Book y Author:
public class Book{ public int Id { get; set; } public string Title { get; set; } public Author Author { get; set; }}
public class Author{ public int Id { get; set; } public string Name { get; set; } public List<Book> Books { get; set; }}Ahora agregaremos un almacenamiento de datos (en un proyecto real use una base de datos) y ampliaremos la clase Query:
public class Query{ private static List<Author> _authors = new() { new Author { Id = 1, Name = "León Tolstói", Books = new List<Book> { new Book { Id = 1, Title = "Guerra y paz", Author = null }, new Book { Id = 2, Title = "Ana Karénina", Author = null } } }, new Author { Id = 2, Name = "Fiódor Dostoyevski", Books = new List<Book> { new Book { Id = 3, Title = "Crimen y castigo", Author = null } } } };
public List<Author> GetAuthors() => _authors;
public Author GetAuthor(int id) => _authors.FirstOrDefault(a => a.Id == id); public List<Book> GetBooks() => _authors.SelectMany(a => a.Books).ToList();}Tenga en cuenta: no configuramos tipos explícitamente — Hot Chocolate genera automáticamente el esquema basado en las clases de C#. Ahora puede ejecutar consultas:
{ authors { id name books { title } }}Blogs
Book Recommendations
Leer también
Colas de tareas en Rust: creación y gestión de tareas asíncronas
Funciones Serverless en Go: AWS Lambda de la A a la Z — Guía completa
Programación asíncrona en Java: guía completa para principiantes
OAuth 2.0 y autorización JWT en C#: guía práctica
Trabajo con JSON en Go: análisis y serialización para principiantes