跳過到頁腳內容
.NET幫助

GraphQL C#(對於開發者的運行原理)

GraphQL 已經成為一種流行的替代方案,用於構建靈活且高效率的Web服務,取代傳統的RESTful API。 GraphQL 支援眾多不同的語言,如Java、Python、ASP .NET Core。 但在本文中,我們將深入探討在C#中使用GraphQL,並通過實際例子來探討其概念、實現和使用。 此外,我們將使用IronPDF for C#,借助GraphQL模式定義查詢類來建立PDF文件。

什麼是GraphQL?

GraphQL 是一種用於API的查詢語言,允許客戶端只請求其所需的資料。 與RESTful API不同的是,GraphQL服務允許客戶端指定他們所需的數據形狀,這使得其更加高效率和靈活。

Setting up GraphQL in C#

在C#專案中使用GraphQL,您需要使用HotChocolate庫,這是.NET一個流行的GraphQL端點伺服器實現。

首先,安裝Hot Chocolate的NuGet套件:

Install-Package HotChocolate.AspNetCore

建立GraphQL模式

GraphQL模式定義了您的API中的資料類型和可用的操作。 以下是一個簡單的模式優先的例子,適用於博客應用程式:

using HotChocolate.Types;

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

public class QueryType : ObjectType
{
    protected override void Configure(IObjectTypeDescriptor descriptor)
    {
        descriptor.Field("helloWorld")
            .Type<StringType>()
            .Resolve(context => "Hello, GraphQL!");
    }
}
$vbLabelText   $csharpLabel

在此例中,我們定義了一個helloWorld欄位,當查詢時返回字串"Hello, GraphQL!"。

建立GraphQL伺服器

接下來,使用ASP.NET Core設置GraphQL伺服器:

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

Querying GraphQL from C#

現在,讓我們看看如何使用GraphQL.Client NuGet套件從C# 客戶端查詢這個GraphQL API:

using GraphQL.Client.Http;
using GraphQL.Client.Serializer.Newtonsoft;
using System;
using System.Threading.Tasks;

// GraphQL query class to interact with the API
public class Query
{
    public static async Task Main()
    {
        // Set up the GraphQL client
        using var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql") // GraphQL endpoint
        }, new NewtonsoftJsonSerializer());

        // Define the GraphQL query
        var request = new GraphQLRequest
        {
            Query = @"
                {
                    helloWorld
                }"
        };

        var response = await graphQLClient.SendQueryAsync<dynamic>(request);
        // Print the response from the GraphQL server
        Console.WriteLine((string)response.Data.helloWorld);
    }
}
using GraphQL.Client.Http;
using GraphQL.Client.Serializer.Newtonsoft;
using System;
using System.Threading.Tasks;

// GraphQL query class to interact with the API
public class Query
{
    public static async Task Main()
    {
        // Set up the GraphQL client
        using var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql") // GraphQL endpoint
        }, new NewtonsoftJsonSerializer());

        // Define the GraphQL query
        var request = new GraphQLRequest
        {
            Query = @"
                {
                    helloWorld
                }"
        };

        var response = await graphQLClient.SendQueryAsync<dynamic>(request);
        // Print the response from the GraphQL server
        Console.WriteLine((string)response.Data.helloWorld);
    }
}
$vbLabelText   $csharpLabel

GraphQL C#提供了一種強大且靈活的API設計方式,並且像HotChocolate這樣的庫,使得將GraphQL後端集成到C#應用程式中變得簡單明瞭。 通過定義模式和設置伺服器,您可以通過GraphQL API公開您的資料,並高效地從C#客戶端查詢。

輸出

GraphQL C#(對開發者的運作方式):圖1 - 執行前述代碼的控制台輸出

Intro to IronPDF in C#

IronPDF 是一個多功能的C#庫,可以輕鬆地建立、編輯和操作PDF文件。 在本節中,我們將介紹IronPDF並演示如何結合GraphQL生成動態PDF報告。

IronPDF在其HTML到PDF功能方面表現出色,保留所有佈局和樣式。 它允許從網頁內容創建PDF,非常適合報告、發票和文檔。 HTML文件、URL和HTML字串可以無縫地轉換為PDF。

using IronPdf;

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

        // 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");

        // 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");

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

        // 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");

        // 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");

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

安裝IronPDF

要開始使用IronPDF,請安裝NuGet套件:

Install-Package IronPdf

使用IronPDF生成含GraphQL資料的PDF

讓我們創建一個PDF報告,從我們的GraphQL API中獲取用戶資料並以格式化的方式顯示。

例子

using IronPdf;
using GraphQL.Client.Http;
using GraphQL.Client.Serializer.Newtonsoft;
using System;
using System.Threading.Tasks;

public class PdfGenerator
{
    public async Task GeneratePdfAsync()
    {
        // Initialize GraphQL client
        var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql")
        }, new NewtonsoftJsonSerializer());

        // Define GraphQL query
        var query = new GraphQLRequest 
        {
            Query = @"
                {
                    helloWorld
                }"
        };

        var response = await graphQLClient.SendQueryAsync<dynamic>(query);
        var helloMessage = response.Data.helloWorld.ToString();

        // Create HTML content for the PDF
        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.Http;
using GraphQL.Client.Serializer.Newtonsoft;
using System;
using System.Threading.Tasks;

public class PdfGenerator
{
    public async Task GeneratePdfAsync()
    {
        // Initialize GraphQL client
        var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql")
        }, new NewtonsoftJsonSerializer());

        // Define GraphQL query
        var query = new GraphQLRequest 
        {
            Query = @"
                {
                    helloWorld
                }"
        };

        var response = await graphQLClient.SendQueryAsync<dynamic>(query);
        var helloMessage = response.Data.helloWorld.ToString();

        // Create HTML content for the PDF
        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");
    }
}
$vbLabelText   $csharpLabel

在此範例中,我們使用GraphQL用戶端從我們的GraphQL API中獲取helloWorld消息。 然後,我們構建一個包含此消息的HTML模板,並使用IronPDF的ChromePdfRenderer將此HTML轉換為PDF文件。

輸出

GraphQL C#(對開發者的運作方式):圖2 - 前述代碼輸出的PDF

結論

GraphQL成為API開發中的一個變革者,相較於傳統的RESTful API,它提供了一種更靈活和高效率的方式來查詢和操作數據。其允許客戶端僅請求所需的類型查詢數據,使其對於追求性能和靈活性的現代Web應用程式特別具有吸引力。

此外,將GraphQL與IronPDF等工具和套件結合使用,為生成動態和由數據驅動的PDF報告開闢了一片新的興奮可能性。 無論是製作發票、生成報告,還是產生任何其他類型的文件,在C#中集成IronPDF與GraphQL提供了一種強大且高效的方式來自動化PDF生成。

總之,GraphQL和C# 是一個建立現代、靈活及高效Web應用程式的強大組合。 有了HotChocolate、GraphQL.Client和IronPDF等程式庫,開發者擁有建立穩健、數據驅動應用程式的所有工具,滿足當前數位環境的需求。

HTML to PDF教學可在以下IronPDF授權指南中供用戶使用。

常見問題解答

GraphQL如何與RESTful API不同?

GraphQL允許客戶端請求所需的精確數據,減少RESTful API常見的過量獲取和欠量獲取。這種靈活性使其在查詢和操作數據方面更高效。

推薦使用哪個庫在C#中設置GraphQL伺服器?

推薦使用HotChocolate庫在C#中設置GraphQL伺服器。它提供了在.NET環境中定義模式和管理查詢的工具。

如何從GraphQL數據在C#中創建PDF報告?

您可以從GraphQL API抓取數據並使用IronPDF將數據轉換為動態PDF報告。IronPDF允許您通過將HTML內容轉換為PDF格式來操作PDF文檔。

將GraphQL集成到C#專案中涉及哪些步驟?

要將GraphQL集成到C#專案,安裝HotChocolate NuGet套件,定義一個大綱數據類型和操作的模式,並使用ASP.NET Core設置伺服器。

如何使用C#客戶端查詢GraphQL API?

使用GraphQL.Client NuGet套件設置一個帶有API端點URI的GraphQLHttpClient。定義您的查詢,並使用SendQueryAsync方法發送。

我可以在C#中將URL轉換為PDF嗎?

是的,您可以在C#中使用IronPDF的ChromePdfRenderer將URL轉換為PDF。它允許您直接將URL的HTML內容渲染為PDF文件。

為什麼將IronPDF與GraphQL結合使用於PDF創建?

IronPDF可以將通過GraphQL獲取的動態HTML內容轉換為PDF,這對於需要更新和特定數據輸出的數據驅動報告非常理想。

如何在C#中創建基本的GraphQL模式?

要在C#中創建基本的GraphQL模式,使用HotChocolate庫的模式定義工具定義可用的數據類型和操作。這涉及到指定字段及其數據類型。

在Web應用中使用GraphQL與C#有哪些優勢?

將GraphQL與C#一起使用可以提供靈活性和性能優勢,允許高效的數據查詢和操作,這對於構建現代Web應用程序至關重要。

如何在C#專案中安裝IronPDF?

使用NuGet包管理器及命令:Install-Package IronPDF安裝IronPDF到C#專案。這樣可以訪問其PDF生成和操作功能。

Jacob Mellor, Team Iron 首席技術官
首席技術官

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me