AYUDA .NET

GraphQL C# (Cómo funciona para desarrolladores)

Actualizado 6 de junio, 2024
Compartir:

Introducción

GraphQL ha ganado gran popularidad como alternativa a las API RESTful para crear servicios web flexibles y eficientes. GraphQL está disponible en multitud de lenguajes diferentes, como Java, Python, ASP .NET core. Pero en este artículo, profundizaremos en el uso de GraphQL en el contexto de C#, explorando sus conceptos, implementación y uso con ejemplos prácticos. Además, utilizaremos IronPDF para C# para crear archivos PDF con la ayuda de la clase de consulta de definición de esquemas GraphQL.

¿Qué es GraphQL?

Lenguaje de consulta GraphQL para API que permite a los clientes solicitar exactamente los datos que necesitan. A diferencia de las API RESTful, en las que varios puntos finales pueden devolver estructuras de datos fijas, los servicios GraphQL permiten a los clientes especificar la forma de los datos que necesitan, lo que los hace más eficientes y flexibles.

Configuración de GraphQL en C#

Para utilizar GraphQL en un proyecto C#, necesitará la biblioteca HotChocolate, una popular implementación de servidor de punto final GraphQL para .NET.

En primer lugar, instale el paquete NuGet de Hot Chocolate:

Install-Package HotChocolate.AspNetCore

Creación de un esquema GraphQL

Un esquema de implementación GraphQL define los tipos de datos y operaciones disponibles en su API. He aquí un ejemplo sencillo de esquema primero, de un esquema de servicio GraphQL para una aplicación de blog:

using HotChocolate.Types;
public class QueryType : ObjectType
{
    protected override void Configure(IObjectTypeDescriptor descriptor)
    {
        descriptor.Field("hello world")
            .Type<StringType>()
            .Resolve(context => "Hello, GraphQL!");
    }
}
using HotChocolate.Types;
public class QueryType : ObjectType
{
    protected override void Configure(IObjectTypeDescriptor descriptor)
    {
        descriptor.Field("hello world")
            .Type<StringType>()
            .Resolve(context => "Hello, GraphQL!");
    }
}
Imports HotChocolate.Types
Public Class QueryType
	Inherits ObjectType

	Protected Overrides Sub Configure(ByVal descriptor As IObjectTypeDescriptor)
		descriptor.Field("hello world").Type(Of StringType)().Resolve(Function(context) "Hello, GraphQL!")
	End Sub
End Class
VB   C#

En este ejemplo, definimos un campo hello world que devuelve una cadena "Hello, GraphQL!"cuando se le pregunta.

Creación de un servidor GraphQL

A continuación, configure un servidor GraphQL utilizando ASP.NET Core:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddGraphQLServer()
            .AddQueryType<QueryType>();
    }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapGraphQL();
        });
    }
}
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddGraphQLServer()
            .AddQueryType<QueryType>();
    }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapGraphQL();
        });
    }
}
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Hosting
Imports Microsoft.Extensions.DependencyInjection
Public Class Startup
	Public Sub ConfigureServices(ByVal services As IServiceCollection)
		services.AddGraphQLServer().AddQueryType(Of QueryType)()
	End Sub
	Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
		app.UseRouting()
		app.UseEndpoints(Sub(endpoints)
			endpoints.MapGraphQL()
		End Sub)
	End Sub
End Class
VB   C#

Consulta GraphQL desde C#

Veamos ahora cómo consultar esta API GraphQL desde un cliente C# utilizando el paquete NuGet GraphQL.Client:

using GraphQL.Client;
using GraphQL.Client.Http;
using System;
using System.Threading.Tasks;
//  clase de consulta
public class query
{
    public static async Task Main()
    {
        using var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql")
        });
        var schema = new GraphQLRequest
        {
            Query = @"
                {
                    hello world
                }"
        };
        var response = await graphQLClient.SendQueryAsync<dynamic>(shema);
        Console.WriteLine(response.Data.hello);
    }
}
using GraphQL.Client;
using GraphQL.Client.Http;
using System;
using System.Threading.Tasks;
//  clase de consulta
public class query
{
    public static async Task Main()
    {
        using var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql")
        });
        var schema = new GraphQLRequest
        {
            Query = @"
                {
                    hello world
                }"
        };
        var response = await graphQLClient.SendQueryAsync<dynamic>(shema);
        Console.WriteLine(response.Data.hello);
    }
}
'INSTANT VB NOTE: 'Option Strict Off' is used here since dynamic typing is used:
Option Strict Off

Imports GraphQL.Client
Imports GraphQL.Client.Http
Imports System
Imports System.Threading.Tasks
'  clase de consulta
Public Class query
	Public Shared Async Function Main() As Task
		Dim graphQLClient = New GraphQLHttpClient(New GraphQLHttpClientOptions With {.EndPoint = New Uri("http://localhost:5000/graphql")})
		Dim schema = New GraphQLRequest With {.Query = "
                {
                    hello world
                }"}
'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
		Dim response = Await graphQLClient.SendQueryAsync(Of Object)(shema)
		Console.WriteLine(response.Data.hello)
	End Function
End Class
VB   C#

GraphQL C# ofrece una forma potente y flexible de diseñar APIs, y con librerías como HotChocolate, integrar un backend GraphQL en sus aplicaciones C# se convierte en algo sencillo. Definiendo un esquema y configurando un servidor, puede exponer sus datos a través de una API GraphQL y consultarlos eficientemente desde clientes C#.

Salida

GraphQL C# (Cómo funciona para desarrolladores): Figura 1 - Salida de la consola al ejecutar el código anterior

Introducción a IronPDF en C#

IronPDF es una versátil biblioteca de C# que permite crear, editar y manipular documentos PDF sin esfuerzo. En esta sección, presentaremos IronPDF y demostraremos cómo utilizarlo junto con GraphQL para generar informes PDF dinámicos.

Instalación de IronPDF

Para empezar a utilizar IronPDF, instale el paquete NuGet:

Install-Package IronPdf

Generación de PDF con datos GraphQL mediante IronPDF

Vamos a crear un informe PDF que obtenga los datos de usuario de nuestra API GraphQL y los muestre formateados.

Ejemplo

using IronPdf;
using GraphQL.Client;
using GraphQL.Client.Http;
using System.Threading.Tasks;
using System;
public class PdfGenerator
{
    public async Task GeneratePdfAsync()
    {
        var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql")
        });
        //  consultas y solicitudes graphql
        var query = new GraphQLRequest 
        {
            Query = @"
                {
                    hello world
                }"
        };
        var response = await graphQLClient.SendQueryAsync<dynamic>(query);
        var helloMessage = response.Data.hello.ToString();
        var htmlContent = $@"
            <html>
            <head><title>GraphQL Report</title></head>
            <body>
                <h1>GraphQL Report</h1>
                <p>{helloMessage}</p>
            </body>
            </html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("GraphQLReport.pdf");
    }
}
using IronPdf;
using GraphQL.Client;
using GraphQL.Client.Http;
using System.Threading.Tasks;
using System;
public class PdfGenerator
{
    public async Task GeneratePdfAsync()
    {
        var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql")
        });
        //  consultas y solicitudes graphql
        var query = new GraphQLRequest 
        {
            Query = @"
                {
                    hello world
                }"
        };
        var response = await graphQLClient.SendQueryAsync<dynamic>(query);
        var helloMessage = response.Data.hello.ToString();
        var htmlContent = $@"
            <html>
            <head><title>GraphQL Report</title></head>
            <body>
                <h1>GraphQL Report</h1>
                <p>{helloMessage}</p>
            </body>
            </html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("GraphQLReport.pdf");
    }
}
'INSTANT VB NOTE: 'Option Strict Off' is used here since dynamic typing is used:
Option Strict Off

Imports IronPdf
Imports GraphQL.Client
Imports GraphQL.Client.Http
Imports System.Threading.Tasks
Imports System
Public Class PdfGenerator
	Public Async Function GeneratePdfAsync() As Task
		Dim graphQLClient = New GraphQLHttpClient(New GraphQLHttpClientOptions With {.EndPoint = New Uri("http://localhost:5000/graphql")})
		'  consultas y solicitudes graphql
		Dim query As New GraphQLRequest With {.Query = "
                {
                    hello world
                }"}
'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
		Dim response = Await graphQLClient.SendQueryAsync(Of Object)(query)
		Dim helloMessage = response.Data.hello.ToString()
		Dim htmlContent = $"
            <html>
            <head><title>GraphQL Report</title></head>
            <body>
                <h1>GraphQL Report</h1>
                <p>{helloMessage}</p>
            </body>
            </html>"
		Dim renderer = New ChromePdfRenderer()
		Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
		pdf.SaveAs("GraphQLReport.pdf")
	End Function
End Class
VB   C#

En este ejemplo, utilizamos el cliente GraphQL para obtener el mensaje 'hola mundo' de nuestra API GraphQL. A continuación, construimos una plantilla HTML que incluye este mensaje y utilizamos el ChromePdfRenderer de IronPDF para convertir este HTML en un archivo PDF.

Salida

GraphQL C# (Cómo funciona para desarrolladores): Figura 2 - PDF resultante del código anterior

Conclusión

GraphQL se ha convertido en un elemento de cambio en el desarrollo de API, ya que ofrece una forma más flexible y eficaz de consultar y manipular datos que las tradicionales API RESTful. Su capacidad para permitir a los clientes solicitar solo el tipo de datos de consulta que necesitan la hace especialmente atractiva para las aplicaciones web modernas en las que el rendimiento y la flexibilidad son primordiales.

Además, la combinación de GraphQL con herramientas y paquetes como IronPDF abre un mundo de posibilidades apasionantes para generar informes PDF dinámicos y basados en datos. Si está creando facturas, generando informes o produciendo cualquier otro tipo de documentos, la integración de IronPDF con GraphQL en C# proporciona una forma potente y eficaz de automatizar la generación de PDF.

En resumen, GraphQL y C# forman una potente combinación para crear aplicaciones web modernas, flexibles y eficientes. Con bibliotecas como HotChocolate, GraphQL.Client e IronPDF, los desarrolladores disponen de todas las herramientas que necesitan para crear aplicaciones sólidas y basadas en datos que satisfagan las exigencias del panorama digital actual.

El tutorial HTML a PDF está disponible en la siguiente dirección enlace a disposición de los usuarios.

< ANTERIOR
C# Call Base Constructor (Cómo Funciona Para Desarrolladores)
SIGUIENTE >
C# Long to String (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,974,197 Ver licencias >
123