AYUDA .NET

GraphQL C# (Cómo funciona para desarrolladores)

Regan Pun
Regan Pun
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, utilizaremosIronPDF 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!");
    }
}

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();
        });
    }
}

Consulta de 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;
// query class
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>(schema);
        Console.WriteLine(response.Data.hello);
    }
}
using GraphQL.Client;
using GraphQL.Client.Http;
using System;
using System.Threading.Tasks;
// query class
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>(schema);
        Console.WriteLine(response.Data.hello);
    }
}

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.

IronPDF destaca por susFuncionalidad de HTML a PDF, preservando todos los diseños y estilos. Permite crear PDF a partir de contenido web, perfecto para informes, facturas y documentación. Los archivos HTML, las URL y las cadenas HTML se pueden convertir sin problemas en PDF.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

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 en PDF que obtenga 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")
        });
        // graphql queries & graphql requests
        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")
        });
        // graphql queries & graphql requests
        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");
    }
}

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 comoIronPDF 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ónGuía de licencias de IronPDF a disposición de los usuarios.

Regan Pun
Ingeniero de software
Regan se licenció en Ingeniería Electrónica por la Universidad de Reading. Antes de incorporarse a Iron Software, sus anteriores puestos de trabajo le obligaban a centrarse en tareas concretas; lo que más le gusta de Iron Software es la variedad de tareas que puede realizar, ya sea añadiendo valor a las ventas, el soporte técnico, el desarrollo de productos o el marketing. Le gusta entender cómo utilizan los desarrolladores la biblioteca de Iron Software y utilizar ese conocimiento para mejorar continuamente la documentación y desarrollar los productos.
< ANTERIOR
C# Call Base Constructor (Cómo Funciona Para Desarrolladores)
SIGUIENTE >
C# Long to String (Cómo funciona para desarrolladores)