Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
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.
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.
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
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
En este ejemplo, definimos un campo hello world que devuelve una cadena "Hello, GraphQL!"cuando se le pregunta.
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
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);
}
}
'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
' query class
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)(schema)
Console.WriteLine(response.Data.hello)
End Function
End Class
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#.
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");
}
}
Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End Class
Para empezar a utilizar IronPDF, instale el paquete NuGet:
Install-Package IronPdf
Vamos a crear un informe en PDF que obtenga datos de usuario de nuestra API GraphQL y los muestre formateados.
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");
}
}
'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")})
' graphql queries & graphql requests
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
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.
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.
9 productos API .NET para sus documentos de oficina